7

У меня есть список файлов с их полными путями, по одному на строку в файле "files.txt"

Я пытался переместить все эти файлы из их исходного местоположения в новый каталог.

Я CDed в каталог, где они живут сейчас и выдал

for file in ~/Desktop/files.txt do mv $file ~/newfolder

но ничего не происходит Я уверен, что упускаю что-то очевидное

5 ответов5

7

bash не будет читать содержимое файла, пока вы не скажете это.

for file in $(cat ~/Desktop/files.txt); do mv "$file" ~/newfolder; done
6

Вы должны указать вашему циклу прочитать файл, иначе он просто выполняет:

mv ~/Desktop/files.txt ~/newfolder

Кроме того, как сказал ботаник, вам нужны разделители. Попробуй это:

while read file; do mv "$file" ~/newfolder; done < ~/Desktop/files.txt

Если ваши пути или имена файлов содержат пробелы или другие странные символы, вам может потребоваться сделать следующее:

while IFS= read -r file; do mv "$file" ~/newfolder; done < ~/Desktop/files.txt

Обратите внимание на кавычки " переменных $file

3

Если имена файлов не содержат пробелов:

mv -t dest_dir $(< text.file)

это, наверное, самый лаконичный способ.

Если в именах файлов есть пробелы

while IFS= read -r filename; do mv "$filename" dest_dir; done < test.file

безопасно.

1

Попробуй это:

python -c "импорт shutil; [shutil.move(_. strip(), 'new') для _ в открытом состоянии ('files.txt'). readlines ()];"

0

возможно

mv -t dest_dir $(sed 's|^|"|;s|$|"|' text.file)

также имеет дело с именами файлов с пробелами, все еще используя одну команду mv и без цикла. Непроверенные.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .