
Я могу сделать это с помощью скриптов Windows CMD, но сейчас я перехожу в Debian через Raspberry Pi.
Я бы хотел сделать следующее...
(В текущей папке)
- Для каждой подпапки...
- Создайте файл с именем original_filenames.txt
- Вывести имя папки в файл original_filenames.txt
- Перечислить все файлы (включая все подпапки) в файле original_filenames.txt
решение1
Использование цикла оболочки:
for dir in */; do
{ printf '%s\n' "$dir"
( cd "$dir" && find . )
} >"$dir/original_filenames.txt"
done
Это перебирает все подкаталоги в текущем каталоге. Тело цикла выводит имя каталога, а затем список всех файлов и каталогов, рекурсивно, в этом каталоге. Этот вывод идет в файл original_filenames.txt
в каталоге.
Короче:
for dir in */; do
find "$dir" >"$dir/original_filenames.txt"
done
Это дает немного другой результат, поскольку все пути, записанные в файл, начинаются с имени подпапки.
Если вас не интересуют имена каталогов и вам нужны только пути к обычным файлам, используйте find
with -type f
после имени каталога.
Обратите внимание, что если вы планируетес использованиемгенерирует выходные файлы для чего-либо, то это завершится ошибкой (или, по крайней мере, будет очень проблематично), если любой из найденных путей содержит символы новой строки (что вполне возможно в системе Unix).
решение2
Это можно сделать с помощью find
команды и exec
опции — примерно так:
find . -type d \( ! -name . \) -exec bash -c '
dirname=$(basename "{}") &&
cd "{}" &&
echo "{}" > original_filenames.txt &&
ls | grep -Fv original_filenames.txt >> original_filenames.txt
' \;
Вот пост на StackOverflow, который может оказаться вам полезным: