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