这对我来说不是一个重要的问题,但我认为 rsync 和 find 相当强大,所以当 rsync 在文件上阻塞时我感到很惊讶,然后 find 也是如此。ls -l
显示该文件有 6093 字节(并且它是该目录中唯一的文件,因此我在 cd'ing 到该目录后执行此操作):
# find . -size 6093c
./????????????????????????:??????????????????????????????????????????
find: './\353\266\204\353\245\230:\353\257\270\352\265\255\354\235\230_\355\205\224\353\240\210\353\271\204\354\240\204_\352\262\214\354\236\204_\354\207\274': No such file or directory
知道这意味着什么吗?奇怪的是,
# find . -size 6093c | xargs less
工作正常。这是 ls 看到的:
# ls -lat | fgrep "6093 "
ls: cannot access ''$'\353\266\204\353\245\230'':'$'\353\257\270\352\265\255\354\235\230''_'$'\355\205\224\353\240\210\353\271\204\354\240\204''_'$'\352\262\214\354\236\204''_'$'\354\207\274': No such file or directory
-rw-rw-r--. 1 nobody nobody 6093 Oct 23 2013 หมวà¸à¸«à¸¡à¸¹à¹:à¹à¸à¸¡à¹à¸à¸§à¹à¸à¹à¸¡à¸£à¸´à¸à¸²
如果我将结果传输到 less,它只会稍微好一点:
# ls -lat | fgrep "6093 " | less
ls: cannot access ''$'\353\266\204\353\245\230'':'$'\353\257\270\352\265\255\354\235\230''_'$'\355\205\224\353\240\210\353\271\204\354\240\204''_'$'\352\262\214\354\236\204''_'$'\354\207\274': No such file or directory
-rw-rw-r--. 1 nobody nobody 6093 Oct 23 2013 <E0><B8><AB><E0><B8><A1><E0><B8><A7><E0><B8><94><E0><B8><AB><E0><B8><A1><E0><B8><B9><E0><B9><88>:<E0><B9><80>
<E0><B8><81><E0><B8><A1><E0><B9><82><E0><B8><8A><E0><B8><A7><E0><B9><8C><E0><B8><AD><E0><B9><80><E0><B8><A1><E0><B8><A3><E0><B8><B4><E0><B8><81><E0><B8><B2>
同一目录有一个文件,即使 ls 也无法处理,但我可以列出它,因为它有点显示为最旧的条目:
# ls -lat | tail -1 | less
ls: cannot access ''$'\353\266\204\353\245\230'':'$'\353\257\270\352\265\255\354\235\230''_'$'\355\205\224\353\240\210\353\271\204\354\240\204''_'$'\352\262\214\354\236\204''_'$'\354\207\274': No such file or directory
-?????????? ? ? ? ? ? <EB><B6><84><EB><A5><98>:<EB>
<AF><B8><EA><B5><AD><EC><9D><98>_<ED><85><94><EB><A0><88><EB><B9><84><EC><A0>
<84>_<EA><B2><8C><EC><9E><84>_<EC><87><BC>
不是特别重要,但有点好奇。
编辑:由于这个问题似乎必须很快引起很多关注,我做了一些“研究”(可能完全准确,也可能不完全准确)。我不太能够复制这个问题,但是:
2013 年 10 月 23 日或附近,我访问了美国游戏节目的 wikidata.org 页面。当时的情况是这样的:https://www.wikidata.org/w/index.php?title=Q7213876&direction=prev&oldid=85645107
然后我点击了一个或多个外语链接。
在我关注的国外链接上,我使用了https://en.wikipedia.org/wiki/DownThemAll!下载所有链接。
这样做会产生许多带有特殊字符的文件名,我几乎确定这就是我得到这两个奇怪文件的方式。
然而,今天这样做,我仍然得到带有特殊字符的文件名,但不完全是下面的那些。
答案1
这个奇怪的命名文件可能是为了转移注意力。您的工具正在执行一些技巧,让您认为某些东西已损坏。
文件名采用 UTF-8 格式,因此您应该export LANG=en_US.UTF-8
允许命令毫无摩擦地使用文件名。运行locale
不带参数的命令来验证当前环境变量。
或者,如果您坚持使用“C”语言环境,请使用ls -b
ls 打印转义序列而不是问号。然后你可以$'\353\266\204\…'
在 bash 中用作参数。
该find
命令胆怯地拒绝将非文本字符写入 tty。换句话说,find
行为find | cat
不同,后者写下的名称不带引号,所以这就是为什么find | xargs
确实有效。一种更可靠的编写方法是find -print0 | xargs -0
防止 xargs 解释可能的空白字符。
这并不能解释“没有这样的文件或目录”——无论如何,你的文件系统可能确实包含错误——但它应该允许你更准确地向命令行陈述你的意图。
起初我不认为这是相关的,但我习惯在奇怪的文件名前加上前缀,以./
防止命令解释它们。侧边栏显示了相关问题“rsync:文件名中的冒号”这可能是 rsync 错误的根本原因。