Неважно. Я нашел этот пост:Использование getopts для анализа параметров после аргумента параметра, отличного от -
, что в основном говорит о том, что я могу решить свою проблему, просто поместив shift
после dirname=$1
Что позволяет вводить аргументы как
$ bash file.sh expected_arg -f optional_arg
Пара вещей:
Вам не хватает -I
в команде xargs
, чтобы указать, для чего следует использовать {}
-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
steeldriver указывает на некоторые проблемы с вашей командой , но я просто хотел добавить более короткое решение с использованием оболочки zsh
(, поскольку вопрос не относился к какой-либо одной оболочке):
cp -- *.jpg(.[1,100]) ~rachel/backup
Это скопирует первые 100 (лексикографическим порядком )обычных файлов в текущем каталоге, который соответствует шаблону подстановки *.jpg
.
Для 100 самых старых файлов по отметке времени модификации используйте *.jpg(.Om[1,100])
и используйте строчный -регистр o
вместо O
, чтобы получить 100 самых последних измененных файлов. Используйте n
вместо Om
, чтобы получить числовую сортировку имен файлов, и добавьте D
, чтобы также сопоставлять скрытые имена.