运行 查找命令后文件不可用

Files not available after running find command

我尝试使用如下查找命令将以“.txt”结尾的文件重命名为“.abc”。现在这些文件在我的磁盘上不可用。

find ./ -type f -iname '*.txt' -exec sh -c 'mv "[=11=]" ".abc"' {} \;

谁能详细解释上面的命令对文件做了什么。

有没有可能找回那些,如果有怎么办?

您使用了错误的变量,大部分文件无法检索。

find ./ -type f -iname '*.txt' -exec sh -c 'mv "[=10=]" ".abc"' {} \;

会将每个 .txt 文件重命名为名为 .abc 的文件。因此,如果您的文件名为 bar.txt 和 foo.txt,它会将 bar.txt 重命名为 .abc,然后将 foo.txt 重命名为 .abc,这将覆盖 bar.txt 的原始内容.您看不到该文件,因为它是 .abc 并且隐藏在普通列表下。如果您 运行 'ls -a' 您将看到一个名为“.abc”的文件,其中包含最后一个重命名的 .txt 文件的内容。

我不确定如何完全按照您的要求做,但是 运行宁

find ./ -type f -iname '*.txt' -exec sh -c 'mv "[=11=]" "[=11=].abc"' {} \;

会将每个 .txt 文件重命名为 .txt.abc 文件。所以你会有 bar.txt.abc 和 foo.txt.abc

回旋曲的解释是正确的。 但是您的问题的解决方案是什么?

如果您想将后缀 .txt 替换为 .abc 可以使用重命名

你会成功的,如果你使用重命名并找到这样的:

find . -type f -iname '*.txt' -print0 | xargs -0 rename .txt .abc

对于通过查找找到的所有文件,如 x.txt 或 a/b.txt,将执行适当的命令,例如

rename .txt .abc x.txt
rename .txt .abc a/b.txt  

所以 x.txt -> x.abc,以及 a/b.txt -> a/b.abc

如果您只想为所有文件添加后缀 .abc,您仍然可以使用 mv

find . -type f -iname '*.txt' -print0 | xargs -0 mv {} {}.abc

对每个文件使用 xargs 执行命令 mv。

顺便说一句:使用查找选项“-print0”和 xargs 选项“-0”,这些命令也适用于包含空格的文件名。