Вы можете использовать https://www.shellcheck.net/, чтобы проверить синтаксис и узнать об отступах. Он предложит некоторые модификации вашего кода. Отличные предложения также @KamilCuk в комментариях.
Когда вам нужно сделать что-то рекурсивное в подкаталогах, вы всегда можете использовать find
с опцией -exec
. Вы используете {}
, чтобы указать, что команда должна применяться к каждому файлу (или каталогу), который соответствует вашим find
опциям.
Это поможет: find $from -type f -name "*.txt" -exec cp {} $to \; -print
-type f
: найти все файлы -exec cp {} $to \;
: для каждого найденного файла ({}
) скопируйте его в каталог $ to. \;
разделяет конец команды для опции -exec
. -name "*.txt"
: если вы хотите фильтровать по имени файла (здесь должно присутствовать расширение .txt, чтобы соответствовать). -print
: если вы хотите увидеть, какие файлы копируются, когда они проходят через ваши каталоги.
Обратите внимание, что find
будет работать, даже если у вас есть огромное количество вложенных файлов. каталоги или очень большое количество файлов в них. ls
иногда дает сбой или занимает очень много времени для вывода большого количества файлов.