[英]Bash script loop through subdirectories and write to file without using find,ls etc
[英]Bash script loop through subdirectories and write to file
我不知道我已經花了很多時間來解決這個問題。 我需要寫劇本。 腳本應在當前目錄的子目錄中遞歸循環。 它應該檢查每個目錄中的文件計數。 如果文件數大於10,則應在“ BigList”文件中寫入這些文件的所有名稱,否則應在“ ShortList”文件中寫入。 看起來應該像
---<directory name>
<filename>
<filename>
<filename>
<filename>
....
---<directory name>
<filename>
<filename>
<filename>
<filename>
....
僅當子目錄未依次包含子目錄時,我的腳本才起作用。 我對此感到困惑。 因為它不符合我的預期。 對於我來說,用任何一種編程語言都將花費不到5分鍾的時間。 請幫助解決此問題,因為我不知道該怎么做。 這是我的劇本
#!/bin/bash
parent_dir=""
if [ -d "$1" ]; then
path=$1;
else
path=$(pwd)
fi
parent_dir=$path
loop_folder_recurse() {
local files_list=""
local cnt=0
for i in "$1"/*;do
if [ -d "$i" ];then
echo "dir: $i"
parent_dir=$i
echo before recursion
loop_folder_recurse "$i"
echo after recursion
if [ $cnt -ge 10 ]; then
echo -e "---"$parent_dir >> BigList
echo -e $file_list >> BigList
else
echo -e "---"$parent_dir >> ShortList
echo -e $file_list >> ShortList
fi
elif [ -f "$i" ]; then
echo file $i
if [ $cur_fol != $main_pwd ]; then
file_list+=$i'\n'
cnt=$((cnt + 1))
fi
fi
done
}
echo "Base path: $path"
loop_folder_recurse $path
我相信這可以滿足您的需求:
find . -type d -exec env d={} bash -c 'out=Shortlist; [ $(ls "$d" | wc -l) -ge 10 ] && out=Biglist; { echo "--$d"; ls "$d"; echo; } >>"$out"' ';'
如果我們既不想計算截止的子目錄,也不希望在輸出中列出子目錄,請使用以下版本:
find . -type d -exec env d={} bash -c 'out=Shortlist; [ $(ls -p "$d" | grep -v "/$" | wc -l) -ge 10 ] && out=Biglist; { echo "--$d"; ls -p "$d"; echo; } | grep -v "/$" >>"$out"' ';'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.