Smilia Asked: 2018-08-22 08:32:58 +0800 CST2018-08-22 08:32:58 +0800 CST 2018-08-22 08:32:58 +0800 CST 删除名称以“?”开头的文件 在命令行中 772 我在 Debian stable 和 Cinnamon DE 下运行,我有一些文件想用命令行删除(现在我用 Nemo 删除这些文件)。 例如,这些.txt文件以“?”开头 在外壳和尼莫这个'?替换为回车: $@debian: ls ssolveIncpUL46pK ?ssolveIncpUL46pK.txt 我试过了: rm ?ss* rm \?ss* rm \ ss* debian command-line 3 个回答 Voted Siva 2018-08-22T08:54:02+08:002018-08-22T08:54:02+08:00 删除此类文件的适当方法是使用文件的inode值。 使用以下命令获取inode值 ls -li 12582925 -rw-r--r-- 1 root root 646 May 23 02:19 ?ssolveIncpUL46pK.txt 入围结果的第一个字段是 inode 值。 然后使用 find 命令删除文件 wrt inode。 find . -inum 12582925 -exec rm -i {} \; Best Answer Kusalananda 2018-08-22T08:39:40+08:002018-08-22T08:39:40+08:00 字符不是问号。该ls实用程序会将不可打印字符替换为?. 还不清楚不可打印字符是否真的是文件名中的第一个字符,或者在此之前是否可能有一个或多个空格。 你想删除这两个文件吗,你可以匹配“坏部分”,*然后更紧密地指定其余的可见文件名: rm -i ./*ssolve* 这将首先将给定模式扩展到所有匹配它的文件名,然后rm将它们删除。如果您不想删除与上述短模式匹配的文件,请更具体并指定文件名的较长部分,例如 rm -i ./*ssolveIncpUL46pK* 这是假设您与要删除的文件位于同一目录中。 使其在实际删除任何内容之前要求确认的-i选项。rm user232326 2018-08-22T10:12:57+08:002018-08-22T10:12:57+08:00 不建议使用 a*来删除文件。它可以比你喜欢的更多。 在 Debian 中,ls(来自 GNU)命令能够以引用的形式[ 1 ]打印文件的值: $ ls -Q "\nssolve" "\n\nssolve" "y" "z" 或者,更好的是,列出带有引用名称和 inode 的文件: $ ls -iQ 26738692 "\nssolve" 26738737 "\n\nssolve" 26738785 "y" 26738786 "z" 然后,使用带有 inode 编号的 rm 来确保只删除正确的文件: $ find . -xdev -inum 26738737 -exec rm -i {} \; 对 find 的调用仅限于一个文件系统 ( -xdev) 以避免匹配其他文件系统上具有相同 inode 号的文件。另请注意,它rm是使用-i(interactive) 选项调用的,因此它会在命令行中询问是否应该删除每个文件。 [ 1 ]请注意,这并不能解决视觉上令人困惑的字符问题,例如西里尔文а($'\U430') 和拉丁文a($'\U61'),它们看起来完全一样,但实际上并不相同。为了更好地查看文件名使用的字节,我们需要使用十六进制查看器; $ touch а a é $'e\U301' $'\U301'e $ ls a ́e é é а # what you "see" here depends on your system. $ printf '<%s>' * | od -An -c < a > < 314 201 e > < e 314 201 > < 303 251 > < 320 260 >
删除此类文件的适当方法是使用文件的
inode
值。使用以下命令获取
inode
值入围结果的第一个字段是 inode 值。
然后使用 find 命令删除文件 wrt inode。
字符不是问号。该
ls
实用程序会将不可打印字符替换为?
. 还不清楚不可打印字符是否真的是文件名中的第一个字符,或者在此之前是否可能有一个或多个空格。你想删除这两个文件吗,你可以匹配“坏部分”,
*
然后更紧密地指定其余的可见文件名:这将首先将给定模式扩展到所有匹配它的文件名,然后
rm
将它们删除。如果您不想删除与上述短模式匹配的文件,请更具体并指定文件名的较长部分,例如这是假设您与要删除的文件位于同一目录中。
使其在实际删除任何内容之前要求确认的
-i
选项。rm
不建议使用 a
*
来删除文件。它可以比你喜欢的更多。在 Debian 中,
ls
(来自 GNU)命令能够以引用的形式[ 1 ]打印文件的值:或者,更好的是,列出带有引用名称和 inode 的文件:
然后,使用带有 inode 编号的 rm 来确保只删除正确的文件:
对 find 的调用仅限于一个文件系统 (
-xdev
) 以避免匹配其他文件系统上具有相同 inode 号的文件。另请注意,它rm
是使用-i
(interactive) 选项调用的,因此它会在命令行中询问是否应该删除每个文件。[ 1 ]请注意,这并不能解决视觉上令人困惑的字符问题,例如西里尔文
а
($'\U430') 和拉丁文a
($'\U61'),它们看起来完全一样,但实际上并不相同。为了更好地查看文件名使用的字节,我们需要使用十六进制查看器;