2011-04-12 76 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 {} \; 
相关问题