Как вызвать текстовый файл в виде списка команд

Проблема: 245 000 плюс файлы, находящиеся в нескольких папках recup_dir (вывод из файла photo_rec run), которые необходимо перенести в централизованную папку для дальнейших операций восстановления. Все файлы являются файлами * .jpg.

У меня есть текстовый файл с именем newlist1.txt, который я форматировал следующими четырьмя способами. И чтобы перейти к каждому разнообразию, необходим хороший редактор поиска / замены. эти файлы сценариев находятся в папке / дисках / Keep / new-s1-recov. Я знаю, я мог бы просто использовать. чтобы указать, где mv файлы, но изначально сценарии находились в другой папке, и этого периода не хватило бы.

echo !(recov1/recup_dir.1033/f340010.jpg)| xargs mv -t /disks/Keep/new-s1-recov echo !recov1/recup_dir.1034/f3442050jpg| xargs mv -t /disks/Keep/new-s1-recov echo recov1/recup_dir.1034/f344208.jpg| xargs mv -t /disks/Keep/new-s1-recov ls recov1/recup_dir.1034/f344208.jpg| xargs mv -t /disks/Keep/new-s1-recov

последние два примера, 3 & amp; 4, работайте правильно, когда выполняется из командной строки. Ни один из примеров не работает, когда я набираю

sh newlist1.txt

или

bash newlist1.txt

Дело в том, что у меня есть более 245000 файлов, которые нужно переместить. Почему я не использую диспетчер файлов и не группирую несколько сотен одновременно? Поскольку файловый менеджер, возможно, является наихудшим программным обеспечением в Ubuntu 16.04.3. Таким образом, командная строка является предпочтительным способом выполнения этой задачи. Если я потрачу несколько дней на выяснение того, как это сделать, я буду считать, что это хорошо потрачено. Я потратил больше времени на файловый менеджер, ожидая, когда экран выйдет из его кажущегося оцепенения и, наконец, покажет, что движение нескольких файлов наконец-то было завершено.

Форматирование выше было взято из другого примеры, которые я нашел в разное время. Я попытался приспособить свою проблему к чужому решению.

Итак, вопрос в следующем: как мне форматировать строки 245000 (используя nano texteditor, который имеет поиск / замену без необходимости добавления дополнительного программного обеспечения в gedit) и вставлять его в файл, который можно вызвать по какой-либо команде, чтобы Ubuntu не дал мне «СЛИШКОМ МНОГО АРГУМЕНТОВ» и умер. Он будет отправлять каждую строку в виде команды, и когда это будет сделано, она выполнит следующую строку и так далее, пока она не будет завершена.

0
задан 28 February 2018 в 05:02

2 ответа

Поскольку 245 000 имен файлов, вероятно, не будут помещаться в командной строке, используйте find и xargs (man find;man xargs) и сделайте что-то вроде:

find recov1/ -type f -iname '*.jpg' -print0 | \ xargs -0 --no-run-if-empty mv -t /disks/Keep/new-s1-recov

Я всегда использую find ... -print0 и xargs -0, если имена файлов содержат пробелы. Возможно, вам придется использовать переключатели xarg --max-args= или --max-chars=, если xargs не работает. Вы также можете заменить mv на echo mv для тестирования.

0
ответ дан 17 July 2018 в 19:51

Поскольку 245 000 имен файлов, вероятно, не будут помещаться в командной строке, используйте find и xargs (man find;man xargs) и сделайте что-то вроде:

find recov1/ -type f -iname '*.jpg' -print0 | \ xargs -0 --no-run-if-empty mv -t /disks/Keep/new-s1-recov

Я всегда использую find ... -print0 и xargs -0, если имена файлов содержат пробелы. Возможно, вам придется использовать переключатели xarg --max-args= или --max-chars=, если xargs не работает. Вы также можете заменить mv на echo mv для тестирования.

0
ответ дан 23 July 2018 в 20:36
  • 1
    Благодаря @waltinator. Мой немой !, забыли + х. Но Waltinator, я использовал ваш пример и только нужно было ввести его в командной строке один раз. Ни одно из моих имен файлов не содержало пробелов, и я искал только файлы .jpg. Таким образом, линия была довольно длинной, но одна линия сделала трюк. Задача решена. Еще раз спасибо. – Hal Hackney 1 March 2018 в 22:10
  • 2
    Спасибо также @guiverc. – Hal Hackney 1 March 2018 в 22:11

Другие вопросы по тегам:

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