將檔案名稱中包含日期的檔案複製到該日期的資料夾中

將檔案名稱中包含日期的檔案複製到該日期的資料夾中

我尋找類似的問題,但在我的案例中很難得到明確的答案。

我使用 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(Mon)


您能幫忙或解釋一下如何做嗎?

如果您向我解釋,請在我的案例中包含目錄路徑,如上所述。

(因為我無法應用您推薦給我的程式碼,因為我缺乏理解。我很抱歉)

再一次非常感謝你。祝你有美好的一天。

答案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
  • 工作時消除迴聲。
  • 也許最好添加一個檢查來看看是否$date不為空。
  • 您可以mkdir -p "$target"在 之前新增mv以避免遺失目錄時發生錯誤。
  • 注意:此代碼有一個千年錯誤;-)

答案2

剛剛創建了一個我測試過的腳本:

#!/bin/bash

SOURCE_FOLDER="video/"
TARGET_FOLDER="video/daily" # Not used as it is under the source folder.

doMove() {
    # Year loop assuming AFTER 2000 up to 2022
    cd "$SOURCE_FOLDER"
    for i in 20{19..20} ; do
        #echo -e "/nWorking on 20$1"
        # Month Loop
        for j in 0{1..9} {10..12} ; do
            # Day Loop
            for k in 0{1..9} {10..31} ; do
                # Find files matching YYMMDD
                file=$(find . -maxdepth 1 -type f -print | grep $i$j$k)
                # For each found file:
                for sf in $file ; do
                    # Find the folder with a different format
                    folder=$(find * -type d -print | grep $i-$j-$k)
                    echo -e "\nFile: $sf"
                    echo -e "Folder: $folder"
                    mv "$sf" "$folder/" # 2> /dev/null
                    echo -e "Moved $sf to $folder"
                done
            done
        done
    done
    cd .. # Change to your needs.
}
doMove

相關內容