Ik probeer alle .odt
-bestanden inclusief die in submappen.
cp -r ~/Documents/* ~/copies # works as expected
cp -r ~/Documents/*.odt ~/copies # does not work as expected
De eerste regel zal alle bestanden en in alle submappen kopiëren, maar de tweede zal alleen de .odt
-bestanden in ~ / Documents kopiëren
en geen van de bestanden in de submappen.
Если вы хотите воспроизвести структуру каталогов (больше похоже на то, что cp -r
делает, как было предложено steeldriver), но заполните ее только .odt
файлов, вы можете сделать это с помощью rsync
, где -f
- это параметр «фильтр». Остальные варианты более просты. Все параметры можно найти в man rsync
.
rsync -nvr -f '+ *.odt' -f '+ **/' -f '- *' --prune-empty-dirs ~/Documents/ ~/copies/
Рекомендуется использовать параметр «пробный запуск» -n
и параметр подробного описания -v
, чтобы увидеть, что будет сделано перед запуском настоящей команды (когда n
удаляется из командной строки).
Вместо этого вы можете позволить оболочке (bash) выполнить рекурсию:
shopt -s globstar
cp -nt ~/copies/ ~/Documents/**/*.odt
или использовать команду find
find ~/Documents -name '*.odt' -exec cp -nt ~/copies/ {} +
Первая может превысить системные ограничения ARG_MAX
, если число if файлы очень большие, в то время как последний прерывает команду, чтобы оставаться в пределах ARG_MAX
.
Я добавил параметр -n
, чтобы предотвратить «затирание» файлов с тем же именем.