web-dev-qa-db-ja.com

ファイルを検索し、コピーしますが、名前は異なります

/ 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

しかし、私はそのフォルダー内にジョン、トム、シモンだけを入れたいと思います。したがって、スクリプトを再度実行すると、スクリプトは最新のものに置き換えられます。

3
s1c

以下は、うまくいけば自明です

find -maxdepth 1 -mtime -2 -type f  -exec bash -c 'name=${1##*/}; cp  "$name" /some/other/dir/${name%%[0-9]*}' _ {} \;
1
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 -

私はそれでうまくいくと思います-それは私にとってはうまくいくようです。 simontom、およびjohnファイルが2日に1回上書きされることを意図している限り、これでうまくいくと思います。それかそれは非常に近いです。ああ、でも、それはGNU tar-そしておそらくGNU findも必要ですが、私はそうではありません後者については確かです。それらの大部分はあなた自身の選択肢だったので、私はそれらをあまり厳しくチェックしませんでした。

1
mikeserv