拡張子[重複]に基づいてディレクトリ(およびサブディレクトリ)のすべてのファイルを新しいフォルダに移動するスクリプト

拡張子[重複]に基づいてディレクトリ(およびサブディレクトリ)のすべてのファイルを新しいフォルダに移動するスクリプト

micro-sdカードを復元するには、photorecを使用する必要があります。複数のファイル拡張子を含む他の多くのディレクトリを含むディレクトリが残りました。ファイル拡張子に基づいて各ファイルを新しいディレクトリに移動したいと思います。

*.jpg /SortedDir/jpg ディレクトリに移動

*.gifが/SortedDir/gifディレクトリに移動されました。

拡張子や*.<'blank>を持たない生ファイルも考慮してください。

Windows で一括でこの操作を正常に実行しました。

@Echo OFF

Set "Folder=C:\MessyDir"
Set "DestDir=C:\SortedDir"

FOR /R "%Folder%" %%# in ("*") DO (
    If not exist "%DestDir%\%%~x#" (MKDIR "%DestDir%\%%~x#")
    Echo [+] Moving: "%%~nx#"
    Move "%%#" "%DestDir%\%%~x#\" 1>NUL
)

Pause&Exit

Linuxスクリプトのバージョンを探しています。

ありがとうございます! !

ベストアンサー1

ソートされていないファイルがすべてにあり、messy_dirサブディレクトリがにあると仮定すると、sorted_dir次のことができます。

(cd sorted_dir; mkdir jpg gif)
find messy_dir -type f \( -iname '*.jpg' -exec mv {} ../sorted_dir/jpg/ \; -o \
                          -iname '*.gif' -exec mv {} ../sorted_dir/gif/ \; \)

これは改善することができますが、良い出発点になります。


スクリプトが必要な場合は、以下を試してください。

#!/bin/bash

# Check assumptions
[ "$#" -eq 2 ] || exit 1
[ -d "$1" ] || exit 1

find "$1" -type f -name '*?.?*' -exec sh -c '
    mkdir -p "$2/${1##*.}" && mv "$1" "$2/${1##*.}"
' find-sh {} "$2" \;

おすすめ記事