2016-04-12 68 views
0

我編輯這篇文章,以簡化它。 我與格式文件名: 07:34 FDE54B69F43633180FB5401F42E4D1B443BD37BB349B7A6CF073CE23CDF2E2EE.json_2016-02-22 08:56 注意,我在文件名的最後日期和時間之間的一個空間如何遍歷每個文件使用查找和for循環

我正在使用此代碼來查找文件名並進行打印。 我想單獨打印每個文件名。

files=($(find test/ -printf "%TY-%Tm-%Td %TT %p\n" | sort -r)) 

#IFS=' test/' read -r -a array <<< "$files" 

for files in ${files[*]} 
do 
    echo "filenames="$files 
done 

我在與末o文件名空間問題。

for files in "${files[*]}" 
do 
    echo "filenames=""$files" 
done 

如果我使用「」,我會得到所有文件名一次,我不希望它。我需要遍歷每個文件名的循環。

我該怎麼做才能做到這一點?

-----這裏實際更新 ,我需要遍歷最新的文件第一次,所以我試圖做這樣的事情:

find /test/ -printf "%TY-%Tm-%Td %TT %p\n" -print0 | sort -r    | while IFS= read -r -d '' file; 
do 
    echo "$file" 
done 

,但它不能正常工作= |

+0

這是在Bash中的數組擴展。你的腳本使用什麼shell? – paddy

+2

有這麼**很多關於此代碼的錯誤 - 只是回答你的直接問題甚至不足以解決它。 –

+0

@paddy,'$ {foo [*]}'是bash中的一個**破解的**數組擴展; ''$ {foo [@]}「'(帶引號)是這樣做的方式,它實際上保留了空白在一起,並且不會試圖在名稱內看起來像glob。 –

回答

0
find . -name 'FDE*json_2016*' -print0 | sort -r | xargs -0 -I {} echo reading {} 

對我有幫助。不過,你應該改變名字模式。

+0

這不是命令=/ 'find/sapfiler/WEBADM/test/-printf'%TY-%Tm-%Td%TT%p \ n「| sort -r' 返回我想要的。但是當我要使用for循環中的返回值時,它不起作用。 – jimmy

+0

您需要使用我的示例中的** xargs **部分,而不是循環 – GMichael