Tengo una gran carpeta de imágenes (miles) y tengo una larga lista de archivos, por nombre exacto, que necesito copiar en otra carpeta. ¿Quiero saber si hay una manera de seleccionar varios archivos específicos de esta carpeta, por nombre, y copiarlos en otra carpeta, usando el terminal, sin copiarlos individualmente?
command-line
files
Alguien con demasiadas fotos
fuente
fuente
cp -rp /copying/from/{folder1/,folder2/,folder3/} path/to/folder
dondep
es para copiar el permiso de la carpeta.Respuestas:
Simplemente copie varios archivos a la vez desde la línea de comando
Hay varias formas de lograr esto. Lo más fácil que he visto es usar lo siguiente.
La sintaxis utiliza el comando cp seguido de la ruta al directorio en el que se encuentran los archivos deseados con todos los archivos que desea copiar envueltos entre paréntesis y separados por comas.
Asegúrese de tener en cuenta que no hay espacios entre los archivos. La última parte del comando,
/home/usr/destination/
es el directorio en el que desea copiar los archivos.o si todos los archivos tienen el mismo prefijo pero diferentes finales, podría hacer algo como esto:
Donde se copiarían file1, file2, file3 y file4.
Por cómo redactó la pregunta, creo que esto es lo que está buscando, pero también parece que podría estar buscando un comando para leer de una lista de archivos y copiarlos a un directorio determinado. Si ese es el caso, hágamelo saber y editaré mi respuesta.
Manejo de duplicados con python
Así que escribí un pequeño script de Python que creo que debería hacer el trabajo. Sin embargo, no estoy seguro de qué tan bien versado está en Python (si está versado en absoluto), así que intentaré explicar cómo usar este script lo mejor que pueda y le haré todas las preguntas que necesite.
Este script debe ser relativamente simple de usar. En primer lugar, copie el código anterior en el programa gedit (debe estar preinstalado en Ubuntu) o en cualquier otro editor de texto.
Una vez que se haya completado, guarde el archivo como move.py en su directorio de inicio (puede ser cualquier directorio, pero para facilitar la instrucción, simplemente usemos el directorio de inicio) o agregue el directorio en el que se encuentra el archivo a su RUTA. Luego
cd
a su directorio de inicio (o cualquier directorio en el que haya guardado move.py) desde la terminal y escriba el siguiente comando:Esto debería copiar todos los archivos que se enumeran desde el directorio de origen al directorio de destino con duplicados tomando el formato pic (1) .jpg, pic (2) .jpg y así sucesivamente. file.txt debe ser un archivo que enumere todas las imágenes que le gustaría copiar con cada entrada en su propia línea separada.
De ninguna manera este script debería afectar el directorio de origen, sin embargo, solo asegúrese de ingresar las rutas correctas al directorio de origen y de destino y lo peor que podría suceder es que copie los archivos en el directorio incorrecto.
Notas
"el archivo no existe" y le pedirá que "presione enter" para continuar y el script continuará copiando el resto de la lista.
/
tanto en la ruta aldirectorio de origen como en la ruta al directorio de destino. De lo contrario, el script le devolverá un error.
fuente
cp $(pwd)/{file1,file2} /path/to/dst/
ocp $(pwd)/{file1,file2} $(pwd)/{renamed1,renamed2}
, etc.Quizás me falta un detalle de su pregunta, pero las respuestas dadas parecen excesivas. Si desea una solución de línea de comando y no un script, por qué no:
Lo bueno de hacerlo de esta manera es que puedes completar con tabulación los nombres de archivo
fuente
brew install coreutils
entonces puedes obtener cosas habituales de gnu cong
prefijo. Así serágcp -t ....
cp
, y particularmente ni OpenBSD ni FreeBSD tienen esa opción, así que sí, esto escp
específico de GNU . Tampoco está especificado por el estándar POSIX . Dado que este es un sitio específico de Ubuntu, esto es aceptable, pero para portar scripts entre sistemas operativos es mejor atenerse al estándar POSIXAquí hay una solución de bash puro. Leerá los nombres de archivo de un archivo de entrada (uno por línea) y copiará cada uno de ellos, renombrando duplicados.
Guarde este script en una carpeta en su
$PATH
y llámelo con la lista de rutas como entrada:También puede ejecutar todo como un comando desde la terminal:
fuente
Según la descripción de la pregunta, entiendo que:
input.txt
Por lo tanto, uno puede hacer uso del siguiente comando:
Explicación:
-I %
especifica el símbolo para el archivo procesado actualmente que se utilizará dentro del comando--arg-file=input.txt
especifica tomar argumentos para ordenar desdeinput.txt
cp /path/to/origin_dir/% /path/to/destination/
ejecutará elcp
comando con/path/to/origin_dir/%
ser reemplazado por/path/to/origin_dir/
y el nombre del archivo procesado actualmente.Ejemplo práctico:
fuente