删除具有空白(不可见)名称的文件有哪些好方法?

时间:2011-04-12 07:42:55

标签: bash filesystems

我在代码库中发现了一些空白名称的文件,但我不知道如何找到它们并删除它们。

6 个答案:

答案 0 :(得分: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

注意:令我惊讶的是,这甚至适用于全宽空格。

答案 1 :(得分:1)

您可以使用-b的{​​{1}}选项查找不可打印的字符,例如ls

答案 2 :(得分:1)

使用-regex选项查找:

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

答案 3 :(得分:0)

尝试跟随:

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

您可能需要使用globbing模式来查找名称不正确的文件。 如果您喜欢所看到的内容,可以将ls -l更改为删除文件的命令。

答案 4 :(得分:0)

试试这个(适用于Ubuntu 10.10):

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

注意:

  • 我发现正则表达式的动物园令人困惑且记录不清。
  • 指定-regextype posix-egrep为我工作,YMMV。
  • 此正则表达式与./foo bar匹配,但匹配./foo bar/baz,因为空白后跟/

要删除文件,请使用-exec rm {} ;选项;记得使用引号(或反斜杠)来防止shell的解释:

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

答案 5 :(得分:0)

我今天遇到了这个问题。消除具有空白名称的文件对我有用的是:

列出带有inode编号的文件

ls -li

按文件删除文件

find -inum XXX -exec rm {} \;