我在代码库中发现了一些空白名称的文件,但我不知道如何找到它们并删除它们。
答案 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 {} \;