Linuxシステムには、次の命名法を使用する何百万ものファイルがあります。
1559704165_a1ac6f55fef555ee.jpg
最初の10桁はタイムスタンプ、次の10桁_
は特定のIDです。特定のファイル名IDと一致するすべてのファイルを別のフォルダに移動したいと思います。
ファイルを含むディレクトリでこれを試しました。
find . -maxdepth 1 -type f | ??????????_a1ac*.jpg |xargs mv -t "/home/ubuntu/ntest"
しかし、エラーメッセージが表示されます。
bash 1559704165_a1ac6f55fef555ee.jpg: command not found
すると、mv ??????????_a1ac*.jpg
引数リストが長すぎるというエラーが発生します。少なくとも15の異なるファイル名パターンがあります。どうやって移動しますか?
ベストアンサー1
以下を使用する必要があります。
find . -maxdepth 1 -type f -name '??????????_a1ac*.jpg' \
-exec mv -t destination "{}" +
つまり、maxdepth 1
サブディレクトリがない現在のディレクトリから検索していることを意味します。
type f
ファイル検索のみを示します。
name '??????????_a1ac*.jpg'
検索中のファイルと一致するパターン。
mv -t destination "{}" +
一致するファイルをターゲットに移動することを示します。ここで、+
一致する新しいファイルが古いファイルに追加されます。たとえば、次のようになります。
mv -t dest a b c d
ここで、abcd は別のファイルです。