che*_*eak 0 linux unix bash filenames macos
在我的外部硬盘驱动器上有两个目录Fun.和Complex_,其中 _ 是一个空格。我无法从垃圾箱中清空或删除它们,但rm -rf我想这样做。两者都没有出现在 OSX 上的 Finder 中,我不记得它们是否出现在 linux 上的 dolphin 中。但它们确实出现在 bash 中。
rm并mv返回No such file or directory。包含文件夹可以移动并带上特殊目录,但不能删除它们。
为什么能ls检测出文件,但rm并mv不能?我该如何修复它们?我\_在复杂文件上使用。(_ 是空格)。
字符一定不是问题。我做了“测试”。和“测试”,我可以使用引号轻松删除它们。但是这些目录仍然无法删除。实际文件本身一定存在非常低级的错误
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 格式。那会相关吗?
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)