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

Bash 删除名称为空(不可见)的文件有哪些好方法?,bash,filesystems,Bash,Filesystems,我在代码存储库中发现了一些名称为空的文件,但我不知道如何找到它们并将其删除。请尝试以下操作: for i in [^a-zA-Z0-9]* do ls -l "$i" done 您可能需要摆弄globbing模式来查找名称不正确的文件。 当您喜欢看到的内容时,您可以将ls-l更改为删除文件的命令。您可以使用ls的-b选项查找不可打印的字符,例如ls-b假设您有权访问find命令 find . -regex ".*\/[[:space:]][[:space:]]*" -exec rm {}

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

请尝试以下操作:

for i in [^a-zA-Z0-9]* 
do
  ls -l "$i"
done
您可能需要摆弄globbing模式来查找名称不正确的文件。
当您喜欢看到的内容时,您可以将ls-l更改为删除文件的命令。

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

假设您有权访问
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
$mkdir-p c/d#生成一些空文件名
$touch“b”a b
$touch“c/”c/b“c/a b”
$touch“c/d/”
$touch“c/d/”
#用标记回显文件名

$find-regex“*\/[[:space:][[:space:]]*”-exec echo'{}使用
-regex
选项查找:

touch " " "  a  b"
find . -maxdepth 1 -regex "^.*/[[:blank:]][[:blank:]]*$" -ls
# find . -maxdepth 1 -regex "^.*/[[:blank:]][[:blank:]]*$" -delete
试试这个(适用于Ubuntu 10.10):

注:

  • 我发现正则表达式类型的集合很混乱,而且文档记录也很差
  • 指定
    -regextype posix egrep
    对我有用,YMMV
  • ./fo bar < /代码>,但与<代码> ./fo-bar /bz 不匹配,因为空白后面是<代码> /< />代码> 。
要删除文件,请使用
-exec rm{}选项;记住使用引号(或反斜杠)来防止shell解释:

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

我今天遇到了这个问题。对于我来说,消除一个空白名称的文件的有效方法是:

列出文件及其索引节点编号

ls -li
按文件的inum删除该文件

find -inum XXX -exec rm {} \;

这将删除以其他字符命名的文件。将其更改为安全算法。模式[[:space:]*将匹配以空白字符开头的文件。这也会导致文件名中带有空格,因此我尝试将
名称
参数更改为
“^[:space:]*$”
,但这一次我没有得到任何结果。@Satoru.Logic谢谢你指出。这种模式匹配像'b'这样的文件名。见我的最新答案;它不包括像
c/b
c/a b
这样的文件名。
find -inum XXX -exec rm {} \;