如果单个命令中存在文件,请在Linux中重命名文件

如果单个命令中存在文件,请在Linux中重命名文件,linux,shell,command,Linux,Shell,Command,如果文件存在于单个命令中,则需要在Linux中重命名该文件 假设我要搜索test.text文件,并用test.text.bak替换它,那么我将触发以下命令 find/-name test.text 如果它存在,那么我就发出命令 mv test.text test.text.bak 在这个场景中,我执行两个命令,但我希望这应该发生在单个命令中 谢谢只要: mv test.text test.test.bak 如果文件不存在,则不会重命名任何内容。 要消除错误消息,当没有文件存在时,请使用该语法

如果文件存在于单个命令中,则需要在Linux中重命名该文件

假设我要搜索test.text文件,并用test.text.bak替换它,那么我将触发以下命令

find/-name test.text 如果它存在,那么我就发出命令 mv test.text test.text.bak

在这个场景中,我执行两个命令,但我希望这应该发生在单个命令中

谢谢

只要:

mv test.text test.test.bak 
如果文件不存在,则不会重命名任何内容。 要消除错误消息,当没有文件存在时,请使用该语法:

mv test.text test.test.bak 2>/dev/null

这将在当前目录和子目录中搜索所有名为“test.test”的文件,然后将每个文件重命名为.bak

如果要在
dir
的子目录中找到
test.txt
并将其移动,请尝试

find dir -name test.txt -exec mv {} {}.bak \;
这将移动符合条件的所有文件。如果要从当前目录进行遍历,请使用
作为目录,而不是
dir


从技术上讲,这将在一个单独的过程中为与
find
匹配的每个文件生成一个单独的命令,但这是“一个命令”,因为您正在使用
find
作为实际启动自己的唯一命令。(如果愿意,可以将
find
视为一种粗糙的编程语言。)

跳过
find
部分…您可能希望使用一些版本控制系统,例如如果
测试,此解决方案是否有效。文本不在当前目录中?通过“工作”你的意思是它会在当前目录中找到其他文件吗?当然不是
mv
只检查文件名参数;如果您说
mv path/to/file.txt path/to/file.txt.bak
,它将在当前目录中的
path
中查找,然后在该目录中查找
to
。如果您使用绝对文件名,它将使用它。@tripleee是的,您是对的,但问题是如何写的:“然后我启动命令mv test.text test.text.bak”,我认为op不会搜索整个目录结构,只搜索当前工作目录中的一个文件。@chaos抑制错误消息是一回事;但如果test.text不存在,mv仍然返回非零退出代码;这可能是您想要的,也可能不是。根据任何有用的定义,这会运行多个命令,并且在名称包含空格或其他shell元字符的文件上会失败。最简单、最可靠的修复方法可能是切换到
find-exec mv
,但这与我的答案重复。您可以添加
-maxdepth 1
,仅搜索当前目录,尽管这有点麻烦。
find dir -name test.txt -exec mv {} {}.bak \;