2011-04-12 80 views

回答

0

嘗試followwing:

for i in [^a-zA-Z0-9]* 
do 
    ls -l "$i" 
done 

您可能需要與文件名匹配模式撥弄找到剛纔壞名稱的文件。 當您喜歡所看到的內容時,可以將ls -l更改爲刪除文件的命令。

+0

會刪除那些文件以其他字符命名。 – kurumi 2011-04-12 07:53:34

+0

將其更改爲安全算法。 – 2011-04-12 07:56:16

+1

模式[[:space:]] *將匹配以空格字符開頭的文件。 – 2011-04-12 07:59:49

1

您可以使用ls-b選項來尋找非打印字符,例如ls -b

4

假設你有機會獲得find命令,

find . -regex ".*\/[[:space:]][[:space:]]*" -exec rm {} \; 

如果您想實際刪除前檢查,

$ mkdir -p c/d # make some empty filenames 
$ touch " " " b" "a b" 
$ touch "c/ " "c/ b" "c/a b" 
$ touch "c/d/ " 
$ touch "c/d/ " 
# echo the filenames with markings 
$ find . -regex ".*\/[[:space:]][[:space:]]*" -exec echo '{}<blank' \; 
./ <blank 
./c/ <blank 
./c/d/ <blank 
./c/d/ <blank 

注意:令我驚訝的是,這甚至可以用全寬度spac ES。

+0

這也帶來了文件的名字空間,所以我試着將'name'參數改成'「^ [[:space:]] * $」',但這次我沒有結果。 – satoru 2011-04-12 09:13:50

+0

@ Satoru.Logic謝謝指出。該模式匹配像'b'這樣的文件名。看到我更新的答案;它排除了像「c/b」和「c/a b」這樣的文件名。 – ento 2011-04-12 13:35:39

1

使用-regex選項找到:

touch " " " a b" 
find . -maxdepth 1 -regex "^.*/[[:blank:]][[:blank:]]*$" -ls 
# find . -maxdepth 1 -regex "^.*/[[:blank:]][[:blank:]]*$" -delete 
0

試試這個(工作在Ubuntu 10.10):

find . -regextype posix-egrep -regex '.*[[:space:]][^/]*' -print 

注:

  • 我發現正則表達式類型動物園混淆並且記錄不完善。
  • 指定-regextype posix-egrep爲我工作,YMMV。
  • 這個正則表達式匹配./foo bar,但它確實是而不是匹配./foo bar/baz,因爲空白後跟/

要刪除文件,請使用-exec rm {} ;選項;請記住使用引號(或反斜槓)來防止外殼解釋:

find . -regextype posix-egrep -regex '.*[[:space:]][^/]*' -exec rm -f '{}' ';' 
0

我今天遇到此問題。什麼工作對我來說,以消除空白的文件名的文件是:

名單及其inode編號的文件

ls -li 

其INUM刪除文件

find -inum XXX -exec rm {} \; 
相關問題