Прочитайте текстовый файл и переместите только эти файлы в другую папку.

Запись в канал или FIFO без процесса чтения рассматривается как ошибка; он генерирует сигнал SIGPIPE и завершается с кодом ошибки EPIPE, если сигнал обрабатывается или блокируется.

2
01.10.2019, 16:06
3 ответа

Это немного другой, но концептуально простой подход (без использования труб):

for fileName in `cat goodfiles.txt`; do mv $fileName /root/testing2/moved/; done
2
27.01.2020, 22:08

Я думаю, полезно помнить, что вы можете изменить часть, которую заменяет xargs, с помощью параметра замены --и указать строку замены. В противном случае он добавляет строку в конец.

Примерно то же самое я смог сделать с

cat filelist |xargs --replace='{}' mv {}./targetdir/

Для тебя может попробовать

cat /root/testing2/goodfiles.txt |xargs --replace '{}' /root/testing2/moved
0
27.01.2020, 22:08

Похоже, вы путаете опцию -fGNU mvс опцией -t, которую вы хотите здесь, чтобы переместить несколько источников в одну цель сxargs

   mv [OPTION]... -t DIRECTORY SOURCE...

Обратите внимание, что обычный xargsразбивает ввод на аргументы, разделенные пробелами, поэтому ваша команда будет прервана, если какое-либо из имен файлов содержит пробелы. Также это UUOC .

Итак,

xargs -d'\n' mv -t /root/testing2/moved/ </root/testing2/goodfiles.txt
0
27.01.2020, 22:08

Теги

Похожие вопросы