2017-12-15 9 views
0

私はUbuntuを使用しており、画像のフォルダ(30k画像)を別のフォルダに分割したいと考えています。しかし、私はそれらを並べ替える(小さなサブフォルダに分割するだけではない)。私は画像のフォルダの宛先に関する情報を含むファイルを持っています。画像123.jpgに: csvファイルを使用してフォルダを複数のフォルダに分割するにはどうすればよいですか?

この3として解釈されるべきである1

  • 124.jpg、2
  • 125.jpg、

    • 123.jpg:ファイルは次のように構成されていますフォルダ1、画像124.jpg〜フォルダ2、画像125.jpg〜フォルダ3

      Ubuntuで効率的な方法がありますか?あなたのファイルのリストと目的地を含むファイルを想定し

  • +0

    確かに、CSVファイルの行を反復カンマで各ラインを分割し、ターゲットディレクトリ(第2列)にファイル(最初の列)を移動します。あなたはすでにこのようなことを試しましたか? – Pavel

    +0

    @Pavel私は悪いですが、私はUbuntuを新しくしており、ほとんど経験がありません。より具体的になりますか? – Ismail

    +0

    https://www.cyberciti.biz/faq/unix-howto-read-line-by-line-from-file/ – Pavel

    答えて

    0

    list.txtに命名され

    あなたはbashシェルでこのようにそれを行うことができます

    while IFS=, read -r file destination 
    do 
        echo "mv $file $destination/$file" 
    done < list.txt 
    

    これは、この質問と回答に基づいています: How to parse a CSV file in Bash?

    +0

    コードを選択して、{}でマークされたボタンをクリックすることで、コードを書式設定できます。 –

    +0

    あなたの答えの中の最後の '$ file'は不要です - Linuxではもっと簡単に' mv file directory'という構文を使うことができますが、それは元の名前を取得しますが新しいディレクトリに保存されます。 –

    +0

    はい、あなたは正しいです、ちょうど明確な答えを提供するためにそれを加えました –

    1

    ファイルに記載されている説明に基づいて、次のようにファイルを移動できます。

    awk -F"," '{ print "mv",$1,$2}' description.txt | sh

    これは、description.txtにリストされている宛先ディレクトリが既に存在することを前提としています。

    awkは(-F","によって設定された)カンマ区切りとしてdescription.txtファイル(,)を読み込み、第一($1)及び第二($ 2)フィールドに、必要な文字列を追加します。最初に出力をテストするために、上記のコマンドを| shの部分なしで使用してください。すべてが正常であれば、実行するために| shを追加します。そのパイプ(|)awkの出力はshellになります。

    description.txtファイルはあなたの例が含まれています

    123.jpg, 1 
    124.jpg, 2 
    125.jpg, 3 
    
    関連する問題