ディレクトリ内のすべてのファイル拡張子を再帰的に見つけ、すべての拡張ファイルを単一のディレクトリにコピーします。

ディレクトリ内のすべてのファイル拡張子を再帰的に見つけ、すべての拡張ファイルを単一のディレクトリにコピーします。

複数の拡張ファイルを含むサブディレクトリを含むディレクトリがあります。すべてのextファイルを単一のディレクトリ「scan」にコピーしたいと思います。成功せずに次のcmdを実行してみました。

find . -name \*.py -o -name \*.sql -o -name \*.conf -o -name \*.csv -exec cp {} scan/ \;

その特定の拡張子のみを使用し、最後の拡張子(.csvなど)ファイルのみを「スキャン」フォルダにコピーします。

以下のコマンドを実行してみましたが、すべての拡張のみが提供されます。ファイルは次のとおりです。

$ find . -type f -name '*.*' | sed 's|.*\.||' | sort -u
conf
coveragerc
css
csv
eot
etlconf
gitignore
hql
html
idx
ini
js
json
log
map
md
pack
pdf
py
sample
sh
sql
svg
ttf
txt
woff
woff2

私が持っているすべてのextnファイルを検索してスキャンしたフォルダにコピーするコマンドを実行したいと思います。ありがとうございます!

答え1

ループはforあまり冗長ではありません。

$ shopt -s globstar nullglob dotglob
$ for i in **/*.{sql,conf,py,csv}; do 
    cp "$i" "scan/$(basename "$i")"
  done

関連情報