2017-07-27 187 views
0

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

我在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 
+3

find命令应该为你做所有这些,而不需要脚本? –

+2

为什么不只是'find $ input_dir -type f -name“* .cbf”'? – Mat

+0

我有很多的文件夹,我应该这样准备。有超过1000个文件夹,你可以找到超过5个子文件夹 –

回答

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可能是一个更好的选择。因此,假设您输入目录不包含空格,

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

(那些谁sugested 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 
+0

我改变了它,但不幸的是它还没有工作。我真的不明白原因是什么: –

+0

'#input_dir/*/*/* _ 00001.cbf''#!/ usr/bin/env bash input_dir = $ 1 output_dir = $ 2 ;文件名为#/ level1/level2/level3/filename.ext cbf = $(readlink -e $ file) cbf_fn = $(basename $ cbf)#cbf_fn = filename.ext cbf_path = $(dirname $ cbf)#cbf_path =/1级/级别2/3级 cbf_path_p2 = $(基名$ cbf_path)#cbf_path_p2 = 3级 cbf_path_p1 = $(基名$(目录名称$ cbf_path))# cbf_path_p1 = level2的 找到'$ cbf_path'型的F -name“* .cbf“-print>'$ output_dir/files.lst' done' –

+0

从你的第一个脚本中,我认为你的'* ._ 00001.cbf'可能是链接。这是一个正确的假设吗?以'ls -l $ input_dir/*/*/* _ 00001.cbf'的形式添加一小部分作为示例('head -5')。目标文件是否也称为“* .cbf”?除了注释之外,请尝试'echo $ cbf_path'和所有其他变量,以便您可以看到它们。他们是你期望他们是什么? –

相关问题