Я пытаюсь написать сценарий, который использует find и xargs для архивирования старых файлов в большой папке. Вот строка:xargs sh -c пропустить первый аргумент
find /tmp/messages/ -mtime +9 -print0 | xargs -x -t -0 -n 1000 sh -c 'tar rPf /tmp/backup.tar "[email protected]" && rm -f "[email protected]"; sleep 1 && echo Finished one loop: $(date +"%T")'
Сценарий в основном работает, но он пропускает первый файл каждый раз, когда команды запуска 1000 файлов, и я не могу понять, почему.
Вот еще один пример (я пытался играть с более простых команд, чтобы увидеть, что происходит:
Если я просто использовать эхо и xargs, я могу запустить одну команду эффективно:
$ echo a b c d e f| xargs -n 2 echo "[email protected]"
a b
c d
e f
$ echo a b c d e f| xargs -n 3 echo "[email protected]"
a b c
d e f
С другой рука, если я хочу спать каждый раз, когда я печатаю каждый набор, добавить Sh -c, чтобы добавить строку команд:?
$ echo a b c d e f| xargs -n 2 sh -c 'echo "[email protected]"; sleep 1;'
b
d
f
$ echo a b c d e f| xargs -n 3 sh -c 'echo "[email protected]"; sleep 1;'
b c
e f
посмотреть, как пропустил первый пункт
Любые идеи о том, что может происходить здесь?
Заранее благодарен! И дайте мне знать, если вам нужна дополнительная информация, я был бы рад предоставить ее.
Посмотрите на опцию '-c', https://linux.die.net/man/1/bash – Inian