我在每个文件夹的任何子文件夹中创建包含模板* .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
答案 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
表示一个整数。 f
或file
可能是更好的选择。因此,假设您的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