Суффикс имени подкаталога с количеством файлов под ним - PullRequest
0 голосов
/ 03 августа 2020

У меня есть подкаталоги ab c. По разным непонятным причинам я хотел бы рекурсивно подсчитывать все файлы под ними и только для maxdepth = 1 mindepth = 1 суффикс этого первого уровня подкаталогов с отсчетом файлов до конца каждого дерева подкаталогов (без ограничений).

Итак, если a и его подкаталоги содержат 23 файла, b ... 64 и c ... 82 у меня будут подкаталоги, переименованные как

a_23 b_64 c_82

I есть процедура для рекурсивного подсчета:

function count_all_files () {
echo "enter directory"
find "$1" -type f | wc -l
}

, но я не знаю, как построить операцию find -exe c для переименования по мере необходимости.

Что-то вроде этого псевдокода.

find . -type d -mindepth 1 -maxdepth 1 "*" -exec $(count_all_files {}) && [suffix dir name]

Благодарен за мысли. Также необходимо работать с каталогами, содержащими пробелы.

1 Ответ

0 голосов
/ 05 августа 2020

Кажется, это работает. Я изменил его, чтобы он всегда производил чистое обновление, например, если вы добавляете новые файлы.

function label_subdirectories_number_files () {

for file in *_my_dir_count_* ; do rename 's/_my_dir_count_.*//g' "$file" ; done 
find . -type d -mindepth 1 -maxdepth 1 -name '*' -exec bash -c 'cd {}  \
&& number_of_files=$(find . -type f | wc -l)  && directory=$(pwd) \
&& directory="${directory## }"  && read -r number_of_files <<< "$number_of_files" \
&& new_directory="$directory""_my_dir_count_""$number_of_files"  && \mv "$directory" "$new_directory" '  &> /dev/null 2>&1 \;
}



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


function label_subdirectories_number_files_many () {
echo "enter number of levels to scan"
for file in *_my_dir_count_* ; do rename 's/_my_dir_count_.*//g' "$file" &> /dev/null 2>&1 ; done

for zcount in $(seq 1 "$1") ; do
echo "level =  $zcount out of  $1 "
find . -type d -mindepth $zcount -maxdepth $zcount -name '*' -exec bash -c 'cd {}  \
&& number_of_files=$(find . -type f | wc -l)  && directory=$(pwd) \
&& directory="${directory## }"  && read -r number_of_files <<< "$number_of_files" \
&& new_directory="$directory""_my_dir_count_""$number_of_files"  && \mv "$directory" "$new_directory" '  &> /dev/null 2>&1 \;

done
}



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