私の写真コレクションを「/home/Bruno/Bilder」ディレクトリの親ディレクトリである「/home/Bruno/Archiv/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
注:これを行うには、2番目のパラメータにファイルパスを追加する必要があります。言い換えれば:
間違った:
find . -ctime +365 -exec install -D '{}' ../Archiv/Bilder/ \;
正しい:
find . -ctime +365 -exec install -D '{}' '../Archiv/Bilder/{}' \;
マニュアルページによるとinstall
:
-D最後のコンポーネントを除いて、DESTのすべての主要コンポーネントを作成し、SOURCEをDESTにコピーします。