Как создать текстовый файл в каждом подкаталоге, чтобы текстовый файл содержал имя каталога

Похоже, вы хотите

tmux load-buffer -
3
22.05.2020, 16:50
2 ответа
for d in dir_*; do
    printf "%s\n" "$d" > "$d/file_${d##*_}.txt"
done
  • $dзаменяется на каждое имя каталога.
  • ${d##*_}заменяется на конечный номер в имени каталога, потому что он удаляет все до последнего подчеркивания из $d. Дополнительные сведения см. в разделе «Расширение параметров» в руководстве BASH или спецификации POSIX .
  • printf "%s\n" "$d" > "$d/file_${d##*_}.txt"записывает имя каталога в текстовый файл в этом каталоге.

С одним -вкладышем:

for d in dir_*; do printf "%s\n" "$d" > "$d/file_${d##*_}.txt"; done

Я отдал предпочтение printfвместо echo, потому что есть особые случаи, которые правильно обрабатываются первыми, но не вторыми, хотя в представленном частном случае echoне возникнет проблем. Подробнее см. Почему printf лучше, чем echo? .


Если вам нужно избегать каталогов, отличных от -, которые также начинаются с dir_, вариант 1 — добавить тест [ -d "$d" ] &&прямо перед оператором printfв приведенном выше сценарии. Вариант 2 — использовать dir_*/, чтобы сопоставлялись только каталоги:

for d in dir_*/; do
    dirn=${d%%/}
    printf "%s\n" "$dirn" > "${d}file_${dirn##*_}.txt"
done
4
18.03.2021, 23:33
find. -name 'dir_[0-9]*'  -type d -execdir bash -c 'name=$0;printf "${name##*/}\n" > "$name/file_${name##*_}.txt"' '{}' \;

Выполнить несколько команд из результатов поиска, используя-execdir

name=$0;=> сохранить каждое имя каталога в переменной $name и обработать его.

0
18.03.2021, 23:33

Теги

Похожие вопросы