bash - 以 . 并且无法删除空格

che*_*eak 0 linux unix bash filenames macos

在我的外部硬盘驱动器上有两个目录Fun.Complex_,其中 _ 是一个空格。我无法从垃圾箱中清空或删除它们,但rm -rf我想这样做。两者都没有出现在 OSX 上的 Finder 中,我不记得它们是否出现在 linux 上的 dolphin 中。但它们确实出现在 bash 中。

rmmv返回No such file or directory。包含文件夹可以移动并带上特殊目录,但不能删除它们。

为什么能ls检测出文件,但rmmv不能?我该如何修复它们?我\_在复杂文件上使用。(_ 是空格)。

编辑

字符一定不是问题。我做了“测试”。和“测试”,我可以使用引号轻松删除它们。但是这些目录仍然无法删除。实际文件本身一定存在非常低级的错误

sagan:Math ptwales$ ls
Complex 
sagan:Math ptwales$ ls -i
ls: Complex : No such file or directory
sagan:Math ptwales$ ls -idF *
ls: Complex : No such file or directory
sagan:Math ptwales$ find . -name * -print0
find: ./Complex : No such file or directory
sagan:Math ptwales$ 
Run Code Online (Sandbox Code Playgroud)

Fun. 我猜测相同的结果是父目录具有指向文件的链接并知道它们的名称,但文件不存在或以某种方式损坏。

外部驱动器采用 exFAT 格式。那会相关吗?

Hen*_*nes 5

rm 和 mv 也可以很好地检测目录,但是您键入:rm file然后外壳将忽略空格。

您可以做一些事情来解决这个问题。最简单的方法是将文件名封装在引号中。另一种解决方案是转义特殊字符,例如使用反斜杠

例子:

touch "testfile "

host:/home/username/test>ls -al
total 12
drwx------   2 hennes  users  4096 Sep 26 02:44 .
drwxr-xr-x  34 hennes  users  8192 Sep 26 01:39 ..
-rw-------   1 hennes  users     0 Sep 26 02:44 testfile
Run Code Online (Sandbox Code Playgroud)

现在删除它们,要么:

rm "testfile ", 或者

rm testfile\ (请注意反斜杠后面的空格)


至于以点结尾的文件名。我无法重现该问题。您确定它以点结尾而不是以其他特殊字符结尾吗?

蟾蜍:/home/hennes/test>bash --version
GNU bash,版本 4.1.10(1)-release (amd64-portbld-freebsd7.3)
版权所有 (C) 2009 Free Software Foundation, Inc.
许可证 GPLv3+:GNU GPL 版本 3 或更高版本 

这是免费软件;您可以自由更改和重新分发它。
在法律允许的范围内,不提供任何保证。

蟾蜍:/home/hennes/test>触摸乐趣。

蟾蜍:/home/hennes/test>ls
乐趣。

蟾蜍:/home/hennes/test>rm 好玩。
蟾蜍:/home/hennes/test>ls
蟾蜍:/home/hennes/test>

如果它是另一个字符而不是点,则在 bash 中读取内部文件分隔符。您可以将其设置为其他内容,或者仅使用带有 -print0 的 find 命令。(示例find /path/to/search-name 'SomeFilePattern*' -print0 | some_command