将某些文件移动到新位置(并附加日期时间)

将某些文件移动到新位置(并附加日期时间)

我有两个目录:

/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)"

相关内容