將一年以上的檔案移至父存檔目錄

將一年以上的檔案移至父存檔目錄

我想將我收藏的照片移到「/home/Bruno/Archiv/Bilder」目錄中,該目錄是「/home/Bruno/Bilder」目錄的父親目錄。

我開始於:

find  -ctime +365 -exec echo mv '{}' ../Archiv/Bilder/'{}' \; | bash

但 find 在 {} 中包含目前目錄的點。所以我得到:

mv ./2013/01/19/DSC_0141.JPG ../Archiv/Bilder/./2013/01/19/DSC_0141.JPG
mv: das Verschieben von »./2013/01/23/IMG_0052.JPG“ nach »../Archiv/Bilder/./2013/01/23/IMG_0052.JPG“ ist nicht möglich: Datei oder Verzeichnis nicht gefunden

所以我去掉了使用 sed 的點:

find  -ctime +577 -exec echo mv '{}' ../Archiv/Bilder/'{}' \;  | sed 's/\/Bilder\/\.\//\/Bilder\//' | bash

但我得到同樣的錯誤:

mv: das Verschieben von »./2013/01/10/IMG_0141.JPG“ nach »../Archiv/Bilder/2013/01/10/IMG_0141.JPG“ ist nicht möglich: Datei oder Verzeichnis nicht gefunden

所以我想切換到 rsync 來完成這項工作:

find  -ctime +577 -exec echo rsync -n --remove-source-files '{}' ../Archiv/Bilder/'{}' \;  | sed 's/\/Bilder\/\.\//\/Bilder\//' | bash

rsync 失敗了,但它更加詳細:

rsync: change_dir#3 "/home/Bruno/Bilder//../Archiv/Bilder/2013/01/10" failed: No such file or directory (2)
rsync error: errors selecting input/output files, dirs (code 3) at main.c(712) [Receiver=3.1.0]

我在這裡做錯了什麼?

答案1

/home/Bruno/Archiv/Bilder/2013/01/23/您的 find 指令遇到了中間目錄(在本例中)尚未建立的問題。這與.你路徑中的(無害的)「」無關。

您必須先建立目標的整個目錄結構,或是建立一個您呼叫的小腳本,而不是mv先建立目標目錄,然後進行移動。

mkdirmv:

#!/bin/sh
mkdir -p -- "$(dirname $2)"
mv -- "$1" "$2"

答案2

供將來參考 - 您可以install直接執行此操作:

install -D ./2013/01/10/IMG_0141.JPG ../Archiv/Bilder/2013/01/10/IMG_0141.JPG

注意:您需要在第二個參數中附加檔案路徑才能使其運作。換句話說:

不正確:

find . -ctime +365 -exec install -D '{}' ../Archiv/Bilder/ \;

正確的:

find . -ctime +365 -exec install -D '{}' '../Archiv/Bilder/{}' \;

根據手冊頁install

-D 建立 DEST 除最後一個之外的所有主要元件,然後將 SOURCE 複製到 DEST

相關內容