我有两个目录:
/routea/path/to/dir1
/routeb/path/to/dir2
我dir1
有一些文件:
file.name
file.name.1
file.name.2
file.name.3
(可能有超过 4 个文件)。我需要将结尾为 1-3 的文件移动到dir2
我尝试过(我认为这是显而易见的步骤):
mv /routea/path/to/dir1/file.name.* /routeb/path/to/dir2/
但这只是告诉我
mv: cannot stat `/routea/path/to/dir1/file.name.*': No such file or directory
让事情变得复杂的是,理想情况下,我想在移动文件时在每个文件的末尾添加一个时间戳,所以我最终会得到类似的结果file.name.1.yyyymmddhhmmss
谁能指出我正确的方向吗?我想我需要使用某种形式的循环来做到这一点,但不知道如何做。
答案1
例如,您可以使用 for 循环来执行此操作,如下所示:
for f in /routea/path/to/dir1/file.name.? ; do fn=`echo $f | cut -d'/' -f6`; mv $f /routeb/path/to/dir2/$fn.`date +%Y%m%d%H%M` ; done
必须根据您拥有的子目录数量来自定义剪切命令。还添加了日期。在 RedHat 上使用 bash 进行了测试。
如果您在目录中启动该命令/route/path/to/dir1/
,则不需要
fn=`echo $f | cut -d'/' -f6`;
部分。
答案2
find dir1/ -name "file.name.[1-3]" -exec bash -c 'mv {} dir2/$(basename "{}").$(date +%Y%m%d%H%M%S)' \;
答案3
和zsh
:
autoload zmv # best in ~/.zshrc
zmv "/routea/path/to/dir1/(file.name.<1-3>)" "/routeb/path/to/dir2/\$1.$(date +%Y%m%d%H%M%S)"