2013-03-25 123 views
0

我正在編寫一個shell腳本,它將使用ls命令在目錄中查找文件(ZIP),並將它們解壓縮到目標中,問題是文件名具有之間的空格,所以當腳本正在掃描時只考慮空間名稱向ls命令輸出的最後一個字段添加雙引號

例如:如果文件名是「ab c.zip」,只有c.zip被認爲是文件名,然後它說沒有找到文件。

所以,請讓我知道如何處理這個

我想如果我可以用雙引號的文件名應該work.so我一直在尋找我如何能在雙引號添加到ls命令的最後一個字段。 我需要所有的ls命令的字段,因爲我在檢查文件大小和時間戳之前也需要解壓縮,所以我只需要用雙引號括起文件名,這是ls命令的最後一個字段。

問候, 沙迪亞

+1

怎麼樣'ls -1 | awk'{printf(「%s%s%s \ n」,「\」「,$ 0,」\「」)}''? – fedorqui 2013-03-25 10:45:02

+0

您無法可靠地解析ls的輸出。您需要使用@clarkw建議或查找的方法。 -maxdepth1 ...'帶'-exec'或'...- print0 | xargs -0'。 – 2013-03-25 13:35:38

回答

1

我建議你使用bash的通配符模式(這將處理空格你)來獲取文件列表,然後使用stat命令來獲取有關特定信息文件。例如:

$ ls -l 
total 1 
-rw-r--r-- 1 root root 0 2013-03-25 16:27 a b c.txt 
-rw-r--r-- 1 root root 0 2013-03-25 16:27 d e f.txt 
$ for file in *.txt; do stat "$file"; done 
    File: `a b c.txt' 
    Size: 0    Blocks: 1   IO Block: 131072 regular empty file 
Device: 3dd0002h/64815106d  Inode: 455629  Links: 1 
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) 
Access: 2013-03-25 16:27:35.388291856 +0800 
Modify: 2013-03-25 16:27:35.388291856 +0800 
Change: 2013-03-25 16:27:35.388310939 +0800 
    File: `d e f.txt' 
    Size: 0    Blocks: 1   IO Block: 131072 regular empty file 
Device: 3dd0002h/64815106d  Inode: 455630  Links: 1 
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) 
Access: 2013-03-25 16:27:35.388401772 +0800 
Modify: 2013-03-25 16:27:35.388401772 +0800 
Change: 2013-03-25 16:27:35.388412772 +0800 
$ 

注意stat--format選項,這樣你可以告訴它給你只有你有興趣在有關文件中的信息。