/ home/user/filesフォルダーに乱数のファイルがあります(4日ごとに新しいファイルがあります)。例えば:
john20
john25
john40
tom12
tom32
simon2
simon8
simon53
最後に変更されたファイル(最新)のみを取得し、ファイル名にその番号を付けずに別の場所(/ home/user/fixed)にコピーしたいと思います。
Findコマンドを使用してそれをフィルタリングおよびコピーする方法は知っていますが、その番号なしですべてをコピーする方法はわかりません。
find $files_are_here -maxdepth 1 -mtime -2 -type f -exec cp {} $new_path \;
これにより、過去2日間に変更されたすべてのファイルが、元の名前で新しいパスにコピーされます。私の場合:
john40
tom32
simon53
しかし、私はそのフォルダー内にジョン、トム、シモンだけを入れたいと思います。したがって、スクリプトを再度実行すると、スクリプトは最新のものに置き換えられます。
以下は、うまくいけば自明です
find -maxdepth 1 -mtime -2 -type f -exec bash -c 'name=${1##*/}; cp "$name" /some/other/dir/${name%%[0-9]*}' _ {} \;
find -mtime -2 \
-maxdepth 1 \
\! -type d \
\( -name 'simon*' \
-o -name 'tom*' \
-o -name 'john*' \
\) | tar -T - \
--xform='s/[0-9]*$//' \
-cf - | tar -C ./path/to/destination --keep-newer-files -xf -
私はそれでうまくいくと思います-それは私にとってはうまくいくようです。 simon
、tom
、およびjohn
ファイルが2日に1回上書きされることを意図している限り、これでうまくいくと思います。それかそれは非常に近いです。ああ、でも、それはGNU tar
-そしておそらくGNU find
も必要ですが、私はそうではありません後者については確かです。それらの大部分はあなた自身の選択肢だったので、私はそれらをあまり厳しくチェックしませんでした。