ファイル名に日付が含まれているファイルをその日付のフォルダにコピーします。

ファイル名に日付が含まれているファイルをその日付のフォルダにコピーします。

似たような質問を見つけましたが、私の場合は明快な答えを得るのが難しかったです。

私はSynology DS1515+とDSM 6.2.2を使用しています。

まず、次のスクリプトを使用して日付を含む毎日のフォルダを作成しました。

mkdir /volume1/video/$(date +%Y-%m-%d\(%a\))

このスクリプトは毎日真夜中に実行されます。だから毎日深夜になるとこんなフォルダが作られます。

(これは、コピーする前にターゲットフォルダが常に存在することを意味します。)

そして、いくつかのビデオファイルをダウンロードしました。このファイル名には日付が含まれています。

例:ABCDABCD.200328.aviまたはEFGHIJKH.200327.1080p.mp4

ファイル名に関する特定の規則はありませんが、各ファイル名には YYMMDD タイプと同様の日付が含まれます。

このファイルを同じ日付を含むフォルダにコピーしたいと思います。

(自動生成されたフォルダの内容は上記の通り)


[ディレクトリの場所]

コピーしたいファイルパス:/volume1/video/

対象ディレクトリの例: /volume1/video/daily/2020-04-06(月)


どうすれば助けたり説明したりできますか?

説明すれば、上記のように私の場合のディレクトリパスも一緒に入れてください。

(私が理解していないので、私が推薦したコードを適用できなかったので申し訳ありません。)

もう一度ありがとうございます。良い一日になってください。

ベストアンサー1

この試み、

for f in /volume1/video/*; do
  # skip over directories
  [ -f "$f" ] || continue
  # grep the date in YYMMDD format
  date=$(printf '%s' "$f" | grep -Eo '[0-9]{6}')
  # set target path using date to convert YYMMDD to YYYY-MM-DD(%a)
  target="/volume1/video/daily/$(date -d "$date" +%Y-%m-%d\(%a\))/"
  # mv the file
  echo mv "$f" "$target"
done
  • 作業中にエコーを削除します。
  • nullでないことを確認するチェックを追加する方が良いかもしれません$date
  • mkdir -p "$target"ディレクトリが欠落しているときにエラーを防ぐために、前に追加できますmv
  • 注:このコードにはミレニアムのバグがあります;-)

おすすめ記事