一部のファイルを新しい場所に移動し、日付時刻を追加します。

一部のファイルを新しい場所に移動し、日付時刻を追加します。

2つのディレクトリがあります。

/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

切り取りコマンドは、サブディレクトリの数に応じてカスタマイズする必要があります。日付も追加されます。 bashを使用してRedHatでテストされました。
ディレクトリからコマンドを起動する場合は/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)"

関連情報