如果文件存在于单个命令中,我需要在Linux中重命名文件。
假设我想搜索test.text文件,我想用test.text.bak替换它然后我触发以下命令
查找/ -name test.text 如果它存在,那么我发出命令 mv test.text test.text.bak
在这种情况下,我正在执行两个命令,但我希望这应该在单个命令中发生。
由于
答案 0 :(得分:3)
如果您想在test.txt
的子目录中找到dir
并移动它,请尝试
find dir -name test.txt -exec mv {} {}.bak \;
这将移动符合条件的所有文件。如果要从当前目录进行遍历,请使用.
作为目录而不是dir
。
从技术上讲,这将在一个单独的进程中为find
匹配的每个文件生成一个单独的命令,但它是“一个命令”,因为您使用find
作为唯一的命令实际上开始自己。 (如果愿意,可以将find
想象成粗略的编程语言。)
答案 1 :(得分:2)
只需:
mv test.text test.test.bak
如果文件不存在,则不会重命名任何内容。 要在没有文件退出时抑制错误消息,请使用以下语法:
mv test.text test.test.bak 2>/dev/null
答案 2 :(得分:0)
for FILE in `find . -name test.test 2>/dev/null`; do mv $FILE $FILE.bak; done
这将搜索当前和子目录中名为“test.test”的所有文件,然后将每个文件重命名为.bak