拡張子に基づいてデスクトップをフォルダ/ディレクトリとして構成するスクリプト

拡張子に基づいてデスクトップをフォルダ/ディレクトリとして構成するスクリプト

すべてのファイルを拡張子でフォルダに保存するスクリプトを実行してデスクトップを整理したいと思います。インターネット検索でいくつかのコードが見つかり、見つかったコードはファイル名でフォルダを作成し、そのフォルダにファイルを配置します。ファイル名ごとに1つのフォルダが必要ない...すべての.txtを含む1つのフォルダ、.jpgを含む別のフォルダ...などが必要です。私はOS Xを使用しています。

これが私が持っているものです...どんな方向でもいいようです。ありがとうございます!

for file in *.txt
    do
        dir="${file%.txt}"
        mkdir -- "$dir"
        mv -- "$file" "$dir"
done

ベストアンサー1

必要なものがファイルタイプ固有のディレクトリであれば、次のようなものが欲しいでしょう。

mkdir txt || { echo "Can't mkdir txt" ; exit 1 ; }
for file in *.txt ; do
    mv -- "$file" txt/
done

上記のトラブルシューティングに注意してくださいmkdir。コードにすでに存在する場合文書変数に含まれる名前を使用すると、$dirコマンドmkdir --"$dir"が実行されます。何も言わずに失敗すると、mvコマンドが実行されます。書くそのファイル。


ランダムに名前付きの複数のファイル(現在のディレクトリにある3文字拡張子を持つすべてのファイル)を処理し、ファイル拡張子としてディレクトリに配置するには、次のコード(テストされていません)を使用できます。

for file in *.??? ; do
    [ -f "$file" ] || continue
    dir="$(echo "$file" | rev | cut -c-3 | rev)"
    mkdir -p "$dir" || { echo "Couldn't mkdir -p $dir; exiting" ; exit 1 ; }
    mv -- "$file" "$dir"
done

説明する:

このパターンは*.???すべてのファイルと一致します。とディレクトリ現在のディレクトリでは、その名前は.ピリオド()で終わり、その後に3文字が続きます。

[ -f "$file" ]テストは通常​​のファイルの場合にのみtrueを返します(ディレクトリやデバイスなどのより特殊なタイプではありません)。それ以外の場合、文はループの残りの部分をスキップします。$filecontinuefor

変数への割り当てはdir素晴らしく見えますが、実際には変数の内容を取得して$file反転し(逆文字列の)最初の3文字を抽出して再度反転し、結果をの値として割り当てます$dir。つまり、ファイル名の最後の3文字です。

その後、mkdir -pディレクトリがすでに存在する場合は成功が返され、ディレクトリが存在しない場合は作成されます(成功が返されます)。成功を返さないと、ファイルをそこに移動したくありません!したがって、エラー処理。

その後、mvコマンドは通常どおりです。


エラー処理に関する注意:

次の構造を見ることができます。

mkdir -p "$dir" || echo "Failed, exiting" && exit 1

コマンドは次のexit場合にのみ実行されるため、完全ではありません。echo成功コマンドが失敗した後mkdir。代わりに、あなたが望むのはexit実行コマンドを持つことですにもかかわらずコマンドがecho成功したかどうか(mkdir失敗したと仮定)ので、上記の中括弧を使用しました。

おすすめ記事