[問題] $(...)中間有空白的問題

看板Linux作者 (玻璃做的大叔)時間11年前 (2013/10/20 20:58), 編輯推噓4(4015)
留言19則, 6人參與, 最新討論串1/1
我用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

10/20 21:07, , 1F
可以用雙引號括起來 像這樣 "$(xxx)"
10/20 21:07, 1F

10/20 21:08, , 2F
等下 為什麼你的不行
10/20 21:08, 2F

10/20 21:10, , 3F
要不然這樣 find ... -exec ls -l "{}"
10/20 21:10, 3F

10/20 21:35, , 4F
只是要看檔案屬性644或rw-r--r--嗎? find本身就print的出來
10/20 21:35, 4F

10/20 21:37, , 5F
find . -printf '%u:%g %m %TY%Tm%Td_%TH%TM%TS %p\n'
10/20 21:37, 5F

10/20 21:37, , 6F
%m→644 而 %M→rw-r--r--
10/20 21:37, 6F

10/20 22:06, , 7F
不用那麼麻煩吧 find . -ls 就可以了
10/20 22:06, 7F

10/20 22:07, , 8F
檔案的空白字元會加上跳脫符號 manpage要看
10/20 22:07, 8F

10/20 22:10, , 9F
find的manpage好長XD (筆記…)
10/20 22:10, 9F

10/20 22:12, , 10F
可以直接跳到標題UNUSUAL FILENAMES 這問題find早考慮了
10/20 22:12, 10F

10/20 22:20, , 11F
感謝各位,各位說的方法確實在ls都可行,甚至我原本還想和
10/20 22:20, 11F

10/20 22:21, , 12F
rm結合的,用-delete也可以搞定,但我不確定這些方法能否在
10/20 22:21, 12F

10/20 22:22, , 13F
其他指令也成立,find能像原本一樣只輸出檔名,但有跳脫嗎?
10/20 22:22, 13F

10/20 22:27, , 14F
嗚蛙...-print0怎麼擠成一團啊?
10/20 22:27, 14F

10/20 22:35, , 15F
print0是null-terminated strings,要下一個程式也支援這樣傳
10/20 22:35, 15F

10/20 22:35, , 16F
檔名
10/20 22:35, 16F

10/20 22:36, , 17F
用null-terminate是因為null和/在大多數的檔案系統中是唯一不
10/20 22:36, 17F

10/20 22:36, , 18F
出現在正常檔名中的檔案
10/20 22:36, 18F

10/21 01:16, , 19F
我比較喜歡 find ./ -type f -print0 | xargs -0 ls -l
10/21 01:16, 19F
文章代碼(AID): #1IOzDU48 (Linux)