簡體   English   中英

Linux 根據文件名中的 ddmmyyyy 日期將大量圖像分類到文件夾中

[英]Linux sorting large number images into folders based on ddmmyyyy date in filenames

我有大量以下格式的圖像 -

randomname_08042020_1837_sometext_somemoretext.jpg
randomname_17012022_1650_sometext_somemoretext.th.jpg
randomname_08042020_1837_sometext_somemoretext.th.jpg
randomname_17012022_1658_sometext_somemoretext.jpg
randomname_09042020_0009_sometext_somemoretext.jpg
randomname_17012022_1658_sometext_somemoretext.th.jpg
randomname_09042020_0009_sometext_somemoretext.th.jpg
randomname_17012022_1711_sometext_somemoretext.jpg
randomname_15062020_1736_sometext_somemoretext.jpg
randomname_17012022_1711_sometext_somemoretext.th.jpg
randomname_15062020_1736_sometext_somemoretext.th.jpg
randomname_17012022_1719_sometext_somemoretext.jpg
randomname_09052020_1812_sometext_somemoretext.jpg
randomname_17012022_1719_sometext_somemoretext.th.jpg
randomname_09052020_1812_sometext_somemoretext.th.jpg
randomname_17012022_1730_sometext_somemoretext.jpg
randomname_09052020_1838_sometext_somemoretext.jpg
randomname_17012022_1730_sometext_somemoretext.th.jpg
randomname_09052020_1838_sometext_somemoretext.th.jpg
randomname_17092021_2340_sometext_somemoretext.jpg

我需要一個腳本根據文件名中的日期將它們分類到 yyyy/mm/dd 文件夾(並創建文件夾),文件名位於 ddmmyyyy 格式的第一個下划線之后。

我已經使用 sed 嘗試了其他答案的各種建議,但都沒有用。 randomname、sometext 和 somemoretext 不是常量變量

編輯 - 添加我到目前為止嘗試過的內容。

有人基於文件名YYYYMMDDHHMMSS中具有不同日期格式的類似問題提出了解決方案,並給出了此代碼作為答案 -

#!/bin/bash

cd /home/user/files
for file in *.msg; do
  date=$(printf "$file" | sed -nE 's/.*_([0-9]{4})([01][0-9])([0-3][0-9])[0-2][0-9][0-6][0-9][0-6][0-9]_.*/\1\/\2\/\3/p')
  if [ -n "$date" ]; then
    mkdir -p "$date" && mv "$file" "$date"
  fi
done

我試圖通過移動正則表達式捕獲元素來調整以適應我的文件日期格式DDMMYYY -

#!/bin/bash

cd /opt/large-out
for file in *.jpg; do
  date=$(printf "$file" | sed -nE 's/.*_([01][0-9])([0-9]{4})([0-3][0-9])([0-9]{4})_.*/\3\/\2\/\1/p')
  if [ -n "$date" ]; then
    mkdir -p "$date" && mv "$file" "$date"
  fi
done

但這沒有用,沒有文件移動或任何錯誤,什么也沒發生。

使用bash

for f in *.jpg; do
  if [[ "$f" =~ _([0-9]{2})([0-9]{2})([0-9]{4})_ ]]; then
   dir="${BASH_REMATCH[3]}/${BASH_REMATCH[2]}/${BASH_REMATCH[1]}"
   echo mkdir -p "$dir"
   echo mv "$f" "$dir";
  fi
done

如果 output 看起來不錯,請刪除兩個echo

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM