如何进入每个子目录并列出文件,并将目录的名称提供给输出

时间:2017-05-22 00:40:52

标签: linux bash

我在主目录中有几个子目录。我想进入每个子目录并列出文本文件,并将子目录的名称提供给输出。

for d in /home/*/;do
cd $d
ls *.txt > dir_*_all_txt.list
done

我想将dir_*替换为子目录的名称。

1 个答案:

答案 0 :(得分:0)

您可以在bash中操作字符串(请参阅Parameter Expansion,或只在##联机帮助页中搜索字符串bash),以删除包含最后一个斜杠的所有内容:

pax> for i in $HOME/tmp* ; do echo $i ${i##*/} ; done
/home/pax/tmp tmp
/home/pax/tmp1 tmp1
/home/pax/tmp2 tmp2
/home/pax/tmp3 tmp3
/home/pax/tmp4 tmp4
/home/pax/tmp5 tmp5

因此,在您的情况下,这将是:

for d in /home/* ;do
    cd $d
    ls *.txt > ${d##*/}_all_txt.list
done

虽然我应该提一下你的代码目前不会区分你正在检查的目录中的目录和文件 - 你可能想使用find -type d来查找目录,或者在循环中用简单的方法检查它if [[ -d ${d} ]]

for d in /home/* ; do
    if [[ -d "${d}" ]] ; then
        cd $d
        ls *.txt > "${d##*/}_all_txt.list"
    fi
done