簡體   English   中英

Bash腳本遍歷子目錄並寫入文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM