
我想將我收藏的照片移到「/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