
Quiero mover las fotos de mi colección a un directorio "/home/Bruno/Archiv/Bilder", que es padre del directorio "/home/Bruno/Bilder".
Empecé con:
find -ctime +365 -exec echo mv '{}' ../Archiv/Bilder/'{}' \; | bash
Pero buscar incluye el punto para el directorio actual en {}. Entonces obtengo:
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
Entonces eliminé el punto del uso de sed:
find -ctime +577 -exec echo mv '{}' ../Archiv/Bilder/'{}' \; | sed 's/\/Bilder\/\.\//\/Bilder\//' | bash
Pero me sale el mismo error:
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
Entonces quería cambiar a rsync para hacer el trabajo:
find -ctime +577 -exec echo rsync -n --remove-source-files '{}' ../Archiv/Bilder/'{}' \; | sed 's/\/Bilder\/\.\//\/Bilder\//' | bash
Y rsync falla, pero es mucho más detallado al respecto:
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]
¿Qué estoy haciendo mal aquí?
Respuesta1
Su comando de búsqueda se encuentra con el problema de que los directorios intermedios (en este caso /home/Bruno/Archiv/Bilder/2013/01/23/
) aún no se han creado. Eso no tiene nada que ver con los (inofensivos) ' .
' en tu camino.
Primero debe crear toda la estructura del directorio para el destino o crear un pequeño script al que llame en lugar de mv
crear primero el directorio de destino y luego realizar el movimiento.
mkdirmv
:
#!/bin/sh
mkdir -p -- "$(dirname $2)"
mv -- "$1" "$2"
Respuesta2
Para referencia futura, puede utilizar install
para hacer esto directamente:
install -D ./2013/01/10/IMG_0141.JPG ../Archiv/Bilder/2013/01/10/IMG_0141.JPG
Nota: debe agregar la ruta del archivo en el segundo argumento para que esto funcione. En otras palabras:
Incorrecto:
find . -ctime +365 -exec install -D '{}' ../Archiv/Bilder/ \;
Correcto:
find . -ctime +365 -exec install -D '{}' '../Archiv/Bilder/{}' \;
Según la página de manual de install
:
-D crea todos los componentes principales de DEST excepto el último, luego copia SOURCE a DEST