/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
しかし、そのフォルダにはJohn、Tom、Simonだけが必要です。したがって、スクリプトを再実行すると、最新のスクリプトに置き換えられます。
答え1
以下は自明な説明であることを願っています。
find -maxdepth 1 -mtime -2 -type f -exec bash -c 'name=${1##*/}; cp "$name" /some/other/dir/${name%%[0-9]*}' _ {} \;
答え2
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
、これが効果があると思います。それとも非常に近いです。ああ、しかしGNUが必要ですtar
。おそらくfind
GNUも必要でしょう。後者についてはよくわかりません。私はこれらをあまり詳しく扱っていませんでした。なぜなら、ほとんどはあなた自身の選択だからです。