ファイル拡張子でディレクトリを探して他の場所にコピー/移動[閉じる]

ファイル拡張子でディレクトリを探して他の場所にコピー/移動[閉じる]

ファイル拡張子とテキストで検索し、バイナリファイルを同じフォルダにコピーしたいと思います。たとえば、私はディレクトリにあり、最後Aにすべての*.gdxファイル(B、、、)をどこかにコピーしたいと思います。CD

A  
|-- B                               
|   |-- file1.out (a text file)                     
|   |-- file1.gdx (a binary file)            
|  
|-- C         
|   |-- file2.out (a text file)  
|   |-- file2.gdx (a binary file)  
|   
|-- D         
|   |-- file3.out (a text file)  
|   |-- file3.gdx (a binary file)  

これは私のコードです。

cd 'find . -maxdepth 2 -name "*.out"|xargs grep "sometext"| awk -F'/' '{print $2}'|sort -u ' && ' find . -maxdepth 2 -name "*.gdx" -print0|xargs -0 cp -t /somewhere' 

問題がここにある場合最初 find複数のフォルダをキャプチャし、すべてのフォルダ内のすべてのファイルの*.gdx代わりに最初のフォルダに1つのファイルのみをコピーします*.gdx。ループを通して実行する必要があると思いますが、スクリプトの方法がわかりません。

ベストアンサー1

そしてfind

find . -type f -name '*.out' -exec grep -q 'PATTERN' {} ';' \
    -exec sh -c 'cp "$1" "${1%.out}.gdx" /somewhere' sh {} ';'

または:

find . -type f -name '*.out' -exec grep -q 'PATTERN' {} ';' \
    -exec sh -c 'for name do cp "$name" "${name%.out}.gdx" /somewhere; done' sh {} +

現在のフォルダーまたは次のフォルダーで、同じ名前のプレフィックスを持つファイルを見つけます.out.outファイルに一致する行がある場合、ファイルPATTERN.gdx同じディレクトリに同じ名前のプレフィックスを持つファイルが一緒にコピーされます。ファイルとして.out/somewhere.out

/somewhereコピーされるファイルと同じ名前の既存のディレクトリエントリがすでに存在するか、.gdxファイルが実際に存在するかどうかはテストされません。

また見なさい:

おすすめ記事