我不知道我已经花了很多时间来解决这个问题。我需要写剧本。脚本应在当前目录的子目录中递归循环。它应该检查每个目录中的文件计数。如果文件数大于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"' ';'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句