Рекурсивно go через каталог и копировать файлы в unix - PullRequest
0 голосов
/ 09 января 2020

Мне нужно рекурсивно go просмотреть каталог и все его подкаталоги и скопировать все файлы в них в другой пустой каталог. «From» - это каталог, через который я хочу go пройти, и скопировать все файлы в «to». В настоящее время он просто копирует все файлы из «из» в «в» и не go в подкаталогах. Есть ли способ, которым это будет работать, или, может быть, какой-то другой способ сделать это?

#/bin/bash
from=$1
to=$2
list=`ls -lR $from | grep '^-' | awk '{ print $10; }'`
for i in $list
do
cp $from/$i $to/$i
done 

1 Ответ

1 голос
/ 09 января 2020

Вы можете использовать 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 иногда дает сбой или занимает очень много времени для вывода большого количества файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...