Linux: 拡張子ごとにすべてのファイルを再帰的に単一のディレクトリにコピーする

Linux: 拡張子ごとにすべてのファイルを再帰的に単一のディレクトリにコピーする

*.tifすべてのファイルを ./old から ./new にコピーしようとしています。./old にはさまざまなファイルを含むサブディレクトリが多数ありますが、./new にはフォルダー ツリーのない TIF ファイルのみが必要です。

そこで私は試してみた

cp -vR ./old/*.TIF ./new`

しかし、エラーが発生しました:

No such file or directory "./old/*.TIF"

何が間違っているのでしょうか?

答え1

これについては検索を使用してくださいfind . -name "*.TIF" -exec cp {} new \;

findファイルを検索するために使用されます。このコマンドは、ファイル名がfindここで終わるファイルを示しています。シェル拡張の二重引用符を覚えておいてください。したがって、すべてのファイルを検索するのは簡単です。 .-name.tiftif

find . -name "*.tif"
./2/3/3.tif
./2/2.tif
./1.tif

次に、ファイルで何かを行うために使用します。-execこの場合、cp見つかったファイルは{}ターゲットディレクトリにnewエスケープされたセミコロンで続きます。\;

答え2

次のようになります。古いディレクトリに入る必要があります:

cd old
cp -R *.tif ../new

答え3

.tifディレクトリ内にファイルがない可能性がありますold

さらに、簡単なスクリプトを使用してファイルのリストを取得し、コピーすることもできます。

find /old -type f | xargs grep *.tif リストをお渡しします。

あなたはこれを行うことができます:

for i in `find /old -type f | xargs grep *.tif` 
do
cp $i /new
done;

関連情報