Как найти и скопировать только первые 100 файлов .jpg в домашнем каталоге, включая все подкаталоги?

Неважно. Я нашел этот пост:Использование getopts для анализа параметров после аргумента параметра, отличного от -

, что в основном говорит о том, что я могу решить свою проблему, просто поместив shiftпосле dirname=$1

Что позволяет вводить аргументы как

$ bash file.sh expected_arg -f optional_arg

0
16.09.2019, 03:47
2 ответа

Пара вещей:

  1. Вам не хватает -Iв команде xargs, чтобы указать, для чего следует использовать {}

  2. -0говорит xargsожидать ввода null -с разделителями, но вы передаете ему новую строку -ввод с разделителями

Итак,

find. -maxdepth 1 -name '*.jpg' -print0 | head -zn 100 | xargs -0 -I{} cp {} /home/rachael/backup

Если у вас есть версия GNU cp, вы можете использовать альтернативную форму

find. -maxdepth 1 -name '*.jpg' -print0 | head -zn 100 | xargs -0 cp -t /home/rachael/backup
1
28.01.2020, 02:22

steeldriver указывает на некоторые проблемы с вашей командой , но я просто хотел добавить более короткое решение с использованием оболочки zsh(, поскольку вопрос не относился к какой-либо одной оболочке):

cp -- *.jpg(.[1,100]) ~rachel/backup

Это скопирует первые 100 (лексикографическим порядком )обычных файлов в текущем каталоге, который соответствует шаблону подстановки *.jpg.

Для 100 самых старых файлов по отметке времени модификации используйте *.jpg(.Om[1,100])и используйте строчный -регистр oвместо O, чтобы получить 100 самых последних измененных файлов. Используйте nвместо Om, чтобы получить числовую сортировку имен файлов, и добавьте D, чтобы также сопоставлять скрытые имена.

2
28.01.2020, 02:22

Теги

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