作者LIAR (玻璃做的大叔)
看板Linux
標題[問題] $(...)中間有空白的問題
時間Sun Oct 20 20:58:03 2013
我用find找了一些檔案,之後要丟給其他指令,譬如用ls -ld要看看權限,
但是檔名中有空白:
.
./olympus
./olympus/40X mediumV.jpg
./olympus/Rtest
./olympus/Rtest/ca.crt
./olympus/Rca.crt
./olympus/40X medium.jpg
./ELISA M2e
./ELISA M2e/CTEST
./ELISA M2e/CTEST/ca.crt
./ELISA M2e/Cca.crt
./LEICA
./LEICA/CRca.crt
./LEICA/ERca.crt
./LEICA/_CACHE_001_
./Rca.crt
如果用
ls -ld $(find . )
ls: 無法存取 ./olympus/40X: 沒有此一檔案或目錄
ls: 無法存取 mediumV.jpg: 沒有此一檔案或目錄
ls: 無法存取 ./olympus/40X: 沒有此一檔案或目錄
ls: 無法存取 medium.jpg: 沒有此一檔案或目錄
ls: 無法存取 ./ELISA: 沒有此一檔案或目錄
ls: 無法存取 M2e: 沒有此一檔案或目錄
ls: 無法存取 ./ELISA: 沒有此一檔案或目錄
ls: 無法存取 M2e/CTEST: 沒有此一檔案或目錄
ls: 無法存取 ./ELISA: 沒有此一檔案或目錄
ls: 無法存取 M2e/CTEST/ca.crt: 沒有此一檔案或目錄
ls: 無法存取 ./ELISA: 沒有此一檔案或目錄
ls: 無法存取 M2e/Cca.crt: 沒有此一檔案或目錄
........後面就是正常的ls。
如果用""把$()包起來
ls -l "$(find . )"
ls: 無法存取 .
./olympus
./olympus/40X mediumV.jpg
./olympus/Rtest
./olympus/Rtest/ca.crt
./olympus/Rca.crt
./olympus/40X medium.jpg
./ELISA M2e
./ELISA M2e/CTEST
./ELISA M2e/CTEST/ca.crt
./ELISA M2e/Cca.crt
./LEICA
./LEICA/CRca.crt
./LEICA/ERca.crt
./LEICA/_CACHE_001_
./Rca.crt: 沒有此一檔案或目錄
連ls的功能都不見了。
請問我應該怎麼把有空白檔名的檔案正確傳給ls?
--
起初,他們追殺共產主義者,我沒有說話,因為我不是共產主義者;
接著,他們追殺猶太人,我沒有說話,因為我不是猶太人;
後來,他們追殺工會成員,我沒有說話,因為我不是工會成員;
此後,他們追殺天主教徒,我沒有說話,因為我是新教教徒;
最後,他們奔我而來,卻再也沒有人站起來為我說話了。
《First They Came(他們首次來時)》,Martin Niemoller牧師(1892-1984)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.176.60.16
→ dododavid006:可以用雙引號括起來 像這樣 "$(xxx)" 10/20 21:07
→ dododavid006:等下 為什麼你的不行 10/20 21:08
→ dododavid006:要不然這樣 find ... -exec ls -l "{}" 10/20 21:10
推 goldie:只是要看檔案屬性644或rw-r--r--嗎? find本身就print的出來 10/20 21:35
→ goldie:find . -printf '%u:%g %m %TY%Tm%Td_%TH%TM%TS %p\n' 10/20 21:37
→ goldie:%m→644 而 %M→rw-r--r-- 10/20 21:37
推 Microscft:不用那麼麻煩吧 find . -ls 就可以了 10/20 22:06
→ Microscft:檔案的空白字元會加上跳脫符號 manpage要看 10/20 22:07
推 goldie:find的manpage好長XD (筆記…) 10/20 22:10
→ Microscft:可以直接跳到標題UNUSUAL FILENAMES 這問題find早考慮了 10/20 22:12
→ LIAR:感謝各位,各位說的方法確實在ls都可行,甚至我原本還想和 10/20 22:20
→ LIAR:rm結合的,用-delete也可以搞定,但我不確定這些方法能否在 10/20 22:21
→ LIAR:其他指令也成立,find能像原本一樣只輸出檔名,但有跳脫嗎? 10/20 22:22
→ LIAR:嗚蛙...-print0怎麼擠成一團啊? 10/20 22:27
→ kdjf:print0是null-terminated strings,要下一個程式也支援這樣傳 10/20 22:35
→ kdjf:檔名 10/20 22:35
→ kdjf:用null-terminate是因為null和/在大多數的檔案系統中是唯一不 10/20 22:36
→ kdjf:出現在正常檔名中的檔案 10/20 22:36
推 qsort:我比較喜歡 find ./ -type f -print0 | xargs -0 ls -l 10/21 01:16