运行 查找命令后文件不可用
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”,这些命令也适用于包含空格的文件名。
我尝试使用如下查找命令将以“.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”,这些命令也适用于包含空格的文件名。