创建文件夹bash中每个子文件夹的文件列表

时间:2017-07-27 13:27:56

标签: linux bash shell

我在每个文件夹的任何子文件夹中创建包含模板* .cbf的文件列表时遇到问题。

我在Shell中编写了脚本。但它始终以“没有这样的文件或目录”退出。

路径的结构如下/ dir / / / * .cbf

#!/usr/bin/env bash
input_dir=$1 
for i in `ls $input_dir/*/*/*_00001.cbf`; do 
    cbf=$(readlink -e $i)
    cbf_fn=$(basename $cbf)
    cbf_path=$(dirname $cbf)
    cbf_path_p2=$(basename $cbf_path)
    cbf_path_p1=$(basename $(dirname $cbf_path))
    find `$input_dir/$cbf_path_p1/$cbf_path_p2` -name "*.cbf" -print > files.lst
done

1 个答案:

答案 0 :(得分:0)

主要原因是该目录可能不存在。我会查看您的代码:

假设您的input_dir/hoppa且您的链接为/hoppa/1/2/a_00001.cbf/hoppa/1/2/a_00001.cbf是指向/level1/level2/level3/filename.ext

的链接
for i in `ls $input_dir/*/*/*_00001.cbf`; do 

处理ls的输出通常是个坏主意。另外,对于那些曾经做过Fortran的人(打卡,那些日子......),i表示一个整数。 ffile可能是更好的选择。因此,假设您的input-dir不包含空格,

for file in $input_dir/*/*/*_00001.cbf ; do
    cbf=$(readlink -e $i)

(那些吸烟的人find可能错过了readlink

    cbf_fn=$(basename $cbf)      # cbf_fn=filename.ext
    cbf_path=$(dirname $cbf)     # cbf_path=/level1/level2/level3
    cbf_path_p2=$(basename $cbf_path)
                                 # cbf_path_p2=level3
    cbf_path_p1=$(basename $(dirname $cbf_path))
                                 # cbf_path_p1=level2
    find `$input_dir/$cbf_path_p1/$cbf_path_p2` -name "*.cbf" -print > files.lst

因此,查找将查找/hoppa/level2/level3,这个目录可能不存在。

done