拡張子に基づいてファイルを見つけてコピーする方法は?

拡張子に基づいてファイルを見つけてコピーする方法は?

photorec復元されたファイルを含む2481個のフォルダを含むデータ回復プロセスのフォルダがあります。

フォルダ名の順序はrecup_dir.1、recup_dir.2 ... recup_dir.2481です。

以下を使用して、このフォルダのすべての拡張子のリストを取得しました。

find . -type f | perl -ne 'print $1 if m/\.([^.\/]+)$/' | sort -u

photorecorgしたがって、上記のコマンドで取得した各拡張子に対応するフォルダのリストを含む別のディレクトリを作成しました。

mkdir 7z arj asf avi bat blend bmp bz2 cdr DOC docx flac flv gif gz html jpg mobi mov mp3 mp4 mpg ods odt ogg pdf php png ppt ps psd rar rtf svg swf tar tif ttf wav wmf xcf xls xlsx xz zip

これで、フォルダ内のファイルをphotorec次の拡張フォルダにコピーする必要がありますphotorecorg

想像find . -print | xargs cp $0 ../photorecorg/<extension>

各拡張ディレクトリにファイルを見つけてコピーできるコマンドは何ですか?

ベストアンサー1

photorec='/pathto/your_photo_recovery_folder'
photorecorg='/pathto/your_photo_recorg_folder'

cd "$photorec" && \
   EXTDIR="$photorecorg" find . -type f -name '*.?*' -exec sh -c '
      for f
      do
         dest=${EXTDIR}/${f##*.}
         cp -p "$f" "$dest/."
      done
   ' x {} +

おすすめ記事