web-dev-qa-db-ja.com

Linux:すべてのファイルを拡張子で単一のディレクトリにコピーします

すべての*.tifファイルを./oldから./newにコピーしようとしています。 ./oldにはさまざまなファイルを含む多くのサブディレクトリがあり、。/ newにはフォルダーツリーのないTIFファイルのみが必要です。だから、私はcp -vR ./old/*.TIF ./newを試してみましたが、エラーが発生しました:

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

私が間違っているのは何ですか?

8
Sergii Rechmp

このためにfindを使用しますfind . -name "*.TIF" -exec cp {} new \;

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

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

次に、-execを使用してファイルを処理します。この場合、cpはファイル{}をターゲットディレクトリnewに見つけ、その後にエスケープされたセミコロン\;を続けます。

11
iiSeymour

こんな感じになります。古いディレクトリを入力する必要があります:

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

古いディレクトリ(直接)には、.tifファイルがない可能性があります。

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

find /old -type f | xargs grep *.tifリストが表示されます

あなたは好きにすることができます

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