2017-07-27 193 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'和所有其他變量,以便您可以看到它們。他們是你期望他們是什麼? –

相關問題