【发布时间】:2014-02-08 03:45:14
【问题描述】:
我需要在一个命令行(bash)中重命名位于 4 个不同目录中的同一个文件...我不能使用“;”或 bash 脚本。谢谢....我正在尝试类似:
mv folder/{folder1,folder2,...}/file folder/{folder1,folder2,...}/new_name_file
但它不起作用。
【问题讨论】:
标签: bash file-rename mv
我需要在一个命令行(bash)中重命名位于 4 个不同目录中的同一个文件...我不能使用“;”或 bash 脚本。谢谢....我正在尝试类似:
mv folder/{folder1,folder2,...}/file folder/{folder1,folder2,...}/new_name_file
但它不起作用。
【问题讨论】:
标签: bash file-rename mv
这是一种方法:
$ mkdir foo bar baz
$ touch {foo,bar,baz}/quux
$ find foo bar baz -type f -name quux | while read file; do mv "$file" $(dirname "$file")/xyxxy; done
$ find foo bar baz -type f -name xyxxy
foo/xyxxy
bar/xyxxy
baz/xyxxy
【讨论】:
你可以在结尾部分定义更多的行:
#!/bin/bash
while read dir diir; do
mv $dir $diir
done <<___HERE
/path/to/dir1 /path/to/diir1
/path/to/dir2 /path/to/diir2
___HERE
你可以在一行中运行它:
$./script.sh | (Do what you want here)
【讨论】:
单线:
find folder/folder{1,2,3} -type f -name 'file' -exec bash -c 'mv -v {} $(dirname {})/new_name_file' \;
【讨论】:
对于这种特定情况,您可以使用:
echo folder/{folder1,folder2,...} | xargs -n1 echo |xargs -I% mv %/oldfile %/newfile
但是一个更便携的重命名子目录中所有文件的方法是
rename(){ #usage rename from_name to_name
find . -name $1 |xargs -l dirname |xargs -I% mv %/$1 %/$2
}
【讨论】: