我在使用模板 *.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
最佳答案
主要原因是该目录可能不存在。我将检查您的代码:
假设您的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
建议使用整数。 f
或 file
可能是更好的选择。因此,假设您的输入目录不包含空格,
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
关于linux - 创建文件夹 bash 中每个子文件夹的文件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45352231/