ファイル名の最初の6桁を含むディレクトリにファイルを移動します。

ファイル名の最初の6桁を含むディレクトリにファイルを移動します。

QNAP nasの単一のディレクトリに、何千もの元の写真(.nef)と関連する設定(同じファイル名、同じ拡張子)があります。私の目標は、自動的にまたはelseというサブディレクトリ.xmpを作成し、それに応じてすべてのファイルをそこに移動することです。すべてのファイル名はミリ秒に似ているか、その中です。 yyyy-mmyyyy/mm
yyyy-mm-dd_hhmmss-###.nefyyyy-mm-dd_hhmmss-###.xmp###

答え1

これらのファイル名の年を知っている場合は、無差別代入攻撃を適用できます。

for year in {1996..2018}; do
    for month in {01..12}; do
        mkdir -p ${year}-${month}
        for filetype in nef xmp; do
            mv ${year}-${month}*.${filetype} ${year}-${month}/
        done
    done
done

答え2

以下は、標準のQNAPで利用可能な一連の制限付きコマンドを含むループベースのソリューションです。

#!/bin/bash
for file in ????-??-??_*.{nef,xmp}
do
    yyyymm=${file/-??_*}
    echo mkdir -p "$yyyymm"
    echo mv -f "$file" "$yyyymm/"
done

たとえば、ファイルに入れます。/root/fixupファイルの多いディレクトリに移動してを実行しますbash /root/fixupyyyy-mm処理中のファイル名に基づいて要求に応じてディレクトリを作成します。

書かれたように何も変わりません。うまく動作すると思われる場合は、echoスクリプトの末尾にある2行からその単語を削除してください。

答え3

特定のパターンに基づいてディレクトリを一括作成したい場合は、次のものを使用できます。

mkdir -p ~/{0001,0002,0003,...,XXXX}/{01,02,03,...,XX}

変数を実際に使用したい値に置き換えます。したがって、年、月、日のディレクトリを作成する例は次のとおりです。

mkdir -p ~/{1998..2018}/{Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec}/{01..31}

その後、31日のない月を検索し、以下の説明に従って削除できます。この投稿。その後、あなたの使命は、写真を正しいディレクトリに配置することです。これは検索と削除によく似ており、次に説明します。この投稿

これにより、現在の作業ディレクトリ内にサブディレクトリが作成されます。 DopeGhotiユーザーが述べたように、forループを作成して各ステップを一度に完了できます。頑張ってください!

関連情報