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.
cp /home/usr/dir/{file1,file2,file3,file4} /home/usr/destination/
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:
cp /home/usr/dir/file{1..4} ./
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.
import os,sys,shutil
### copies a list of files from source. handles duplicates.
def rename(file_name, dst, num=1):
#splits file name to add number distinction
(file_prefix, exstension) = os.path.splitext(file_name)
renamed = "%s(%d)%s" % (file_prefix,num,exstension)
#checks if renamed file exists. Renames file if it does exist.
if os.path.exists(dst + renamed):
return rename(file_name, dst, num + 1)
else:
return renamed
def copy_files(src,dst,file_list):
for files in file_list:
src_file_path = src + files
dst_file_path = dst + files
if os.path.exists(dst_file_path):
new_file_name = rename(files, dst)
dst_file_path = dst + new_file_name
print "Copying: " + dst_file_path
try:
shutil.copyfile(src_file_path,dst_file_path)
except IOError:
print src_file_path + " does not exist"
raw_input("Please, press enter to continue.")
def read_file(file_name):
f = open(file_name)
#reads each line of file (f), strips out extra whitespace and
#returns list with each line of the file being an element of the list
content = [x.strip() for x in f.readlines()]
f.close()
return content
src = sys.argv[1]
dst = sys.argv[2]
file_with_list = sys.argv[3]
copy_files(src,dst,read_file(file_with_list))
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:
python move.py /path/to/src/ /path/to/dst/ file.txt
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
- Este script supone que todas las imágenes originales están en el mismo directorio. Si desea que también verifique los subdirectorios, deberá modificar el script.
- Si accidentalmente escribe mal el nombre de un archivo, el script escupirá el error
"el archivo no existe" y le pedirá que "presione enter" para continuar y el script continuará copiando el resto de la lista.
- No olvide el final
/
tanto en la ruta al
directorio de origen como en la ruta al directorio de destino. De lo contrario, el script le devolverá un error.
cp -rp /copying/from/{folder1/,folder2/,folder3/} path/to/folder
dondep
es para copiar el permiso de la carpeta.