Скопируйте файл во все подпапки и подпапки.

У меня есть файл, скажем, a.txt

Я хочу скопировать его во все подпапки и все папки в этих папках. Я пытался создать скрипт для запуска, но я продолжаю получать ошибки.

Любая помощь?

код, который я пробовал, был ниже. Но это только копирует его в подкаталоги, а не в подкаталоги

for i in ./* # iterate over all files in current dir
do
    if [ -d "$i" ] # if it's a directory
    then
        cp a.txt "$i" # copy a.txt into it
    fi
done
        cd ..
    done

1 ответ1

1

Ваш сценарий копируется только в подкаталоги, потому что это все, что вы говорите (./* - это все файлы в текущем каталоге, и вы никогда не углубляетесь). Вы можете реализовать это рекурсивно, но, вероятно, проще сделать что-то вроде:

find . -mindepth 1 -type d -exec cp a.txt {} \;

Или для соответствия POSIX и максимальной мобильности:

find . ! -path . -type d -exec cp a.txt {} \;

Это будет делать то, что вы хотите: скопируйте a.txt в каждый каталог (sub)+ в текущем дереве.

Вы можете использовать опцию -maxdepth чтобы ограничить глубину подкаталогов, если хотите. Вы можете использовать опцию -mindepth (где доступно), чтобы установить минимальный предел глубины. В первом примере выше мы используем -mindepth 1 чтобы пропустить . чтобы не выводить предупреждение о копировании файла на себя - это не является абсолютно необходимым, но приятно не иметь предупреждений.

Для получения дополнительной информации о find посетите его справочную страницу.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .