Я випадково поставив пробіл на своєму шляху, потім перемістив безліч файлів - де вони?


0

Я використовував наступний код для переміщення багатьох файлів:

sourceDIR=/Volumes/MCOOPER/data
destDIR=/Volumes/MCOOPER2 /data
for i in {1..6000}
do
mv $sourceDIR/run$i.mat $destDIR/
done

Тепер усі мої файли пішли. Чи є можливість їх отримати? Дуже дякую.


2
Оскільки destDIRце не визначено, малоймовірно, що цей сценарій взагалі нічого б не зробив. (Якщо це не відрізняється від того, що ви нам показуєте.)
devnull

Як і в сторону, ви могли б , ймовірно , запустити цю просту команду замість: mv /Volumes/MCOOPER/data/run{1..6000}.mat /Volumes/MCOOPER2/data. Застереження, можливо, є занадто довгим списком команд, але я не думаю, що це має бути проблемою для сучасних систем.
Dolda2000

@ Dolda2000 Так, я отримав занадто довгу помилку в списку аргументів, коли я намагався це зробити в одній вкладиші.

@ mr.cooper: Це трохи дивно, тому що я цього не зробив. Ну добре.
Dolda2000

@devnull На жаль, сценарій, здавалося, щось зробив, тому що всі ці файли вже відсутні. Однак є одна відмінність між тим, що я розмістив, і фактичним сценарієм - я залишив передню косу рису в своєму первісному дописі, який тепер був виправлений

Відповіді:


0

Зверніть увагу, що ваше визначення destDIRзовсім не встановлює його значення; вона просто намагається запустити програму /dataз цим набором змінних. Оскільки програма /dataне називає, нічого змістовного не відбувається.

Бачачи, то, як $destDIRне визначено, ваш mvкомандний рядок зводиться до чогось такого:

mv /Volumes/MCOOPER/data/run10.mat /

Тоді здається розумним припустити, що ваші файли переміщені в кореневу директорію. Ви там перевіряли?

Також, як загальна порада, є щонайменше три речі, які ви, можливо, захочете звикнути уникати подібних аварій у майбутньому:

  • Завжди цитуйте розширення параметрів, якщо ви просто не хочете, щоб вони були розділеними на слова:mv "$sourceDIR/run$i.mat" "$destDIR"
  • Якщо ви чітко не знаєте, що хочете замінити файли, запустіть mvза допомогою -iперемикача, щоб уникнути випадкової заміни.
  • Коли ви знаєте, що хочете перемістити речі в каталог, корисно поставити остаточну косу рису на ім'я цього каталогу як захист від випадкового перейменування файлів. Це:destDIR=/Volumes/MCOOPER2/data/

Крім того, ви можете або не можете, залежно від ваших обставин, хотіти запустити set -e, щоб зробити оболонку вихід, як тільки будь-яка команда не виконана, замість того, щоб продовжувати наступні команди.


НЕПРАВИЛЬНО. destDIRбуло б невдало. Конкретна лінія буде намагатися виконати /dataз , destDIRяк навколишнє середовище.
devnull

@devnull: Так, я насправді щойно зрозумів. Але в цьому випадку буде лише один аргумент, mvі файли повинні залишитися недоторканими, тому тут явно щось інше.
Dolda2000

Примітка: Ще раз оновлена ​​відповідь, щоб відповідати редагуванню на питання.
Dolda2000

@ Dolda2000: Дякую за корисні пропозиції - я дуже новачок у скриптових програмах, і я використовую його для управління багатьма файлами, які я генерую для моєї докторської роботи (тобто я не є професійним програмістом, але бажаю навчитися правильному кодуванню). Я не запускався як root, а якщо бути точним, я виконав як ./move_data.sh. Крім того, за коментарем до списку аргументів, я читав ваше повідомлення неправильно перший раз, я використовував * .mat для однолінійки, а не синтаксис, який ви запропонували, тому я не впевнений, чи отримав би я аргумент у списку занадто довга помилка.
містер. купер

1
О ні, я думаю, ви це зрозуміли. Так, ви маєте рацію в попередньому рядку коду, який я встановив destDIR, і тоді цей рядок повинен був оновити його. В основному у мене є два destDIR, і замість створення унікальних імен змінних для кожного я очікував, що оригінальний destDIR буде перезаписаний. Я думаю, це означає, що я писав над файлами в іншому каталозі.
містер. купер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.