ファイルを複数のフォルダに移動する[閉じる]

ファイルを複数のフォルダに移動する[閉じる]

この機能を検索してみると回答がたくさんありますが、私に合った機能が見つかりません。

約30,000個のファイルを含むフォルダがあり、これらのファイルを別のフォルダに移動するには、ターミナルコマンドまたはbashスクリプトが必要です。各フォルダには約3000個のファイルがあります。一部のファイル名にはアンダースコア、スペース、ハイフンが含まれているため、このコマンドを使用すると、アンダースコア、スペース、ハイフンなしでファイルとファイルを移動できます。ファイルは.jpgですが、後で別の形式と数で使用する必要がある場合に備えて、すべてのファイルタイプとファイル数に合わせてカスタマイズできるコマンドが必要です。

修正する:

必要なタスクを実行するbashスクリプトが見つかりました。フォルダ内のファイルをサブフォルダに移動します。あらゆる種類のファイルで動作します。数字「3001」は、各サブフォルダに移動するファイルの数を示す。この番号は変更されることがあります。したがって、20,000個のファイルを含むフォルダがあり、20,000個のファイルを500個のバッチに分割してサブフォルダに移動するには、「3001」を「500」に置き換えます。特定のファイル形式のみを移動するようにスクリプトを変更することもできます。たとえば、.jpgファイルのみを移動するには、「for file in *」を「for jpg_file in *.jpg」に変更します。また、「$file」を「$jpg_file」に変更します。

#!/bin/bash

c=1; d=1; mkdir -p dir_${d}

for file in *
do
        if [ $c -eq 3001 ]
        then
                d=$(( d + 1 )); c=0; mkdir -p dir_${d}
        fi
        mv "$file" dir_${d}/
        c=$(( c + 1 ))
done

ベストアンサー1

私はすべてのスクリプトを試しましたが、何らかの理由で機能しなかったか、部分的にのみ機能しました。私このbashスクリプトが見つかりました。そして、.xmlファイルの代わりに.jpgファイルを見つけるように調整します。

#!/bin/bash

c=1; d=1; mkdir -p dir_${d}

for jpg_file in *.jpg
do
        if [ $c -eq 501 ]
        then
                d=$(( d + 1 )); c=0; mkdir -p dir_${d}
        fi
        mv "$jpg_file" dir_${d}/
        c=$(( c + 1 ))
done

それはうまく動作し、迅速に動作します。今私の唯一の問題は、".jpg"だけでなく、すべてのファイルをフォルダに移動することです。また、大文字と小文字を区別し、「.JPG」は移動されません。ファイルまたは少なくとも画像ファイルを移動するように調整する方法についてのアイデアはありますか?

おすすめ記事