command-line – Copiar varios archivos específicos de una carpeta a otra

Pregunta:

Tengo una carpeta grande de imágenes (miles) y tengo una lista larga de archivos, por nombre de archivo exacto, que necesito copiar a otra carpeta. Quiero saber si hay alguna manera de poder seleccionar varios archivos específicos de esta carpeta, por nombre, y copiarlos a otra carpeta, usando la terminal, sin copiarlos individualmente.

Respuesta:

Simplemente copie varios archivos a la vez desde la línea de comandos

Hay varias formas de lograrlo. 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 entre corchetes 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 terminaciones, puede hacer algo como esto:

cp /home/usr/dir/file{1..4} ./

Donde se copiarían archivo1, archivo2, archivo3 y archivo4.

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 todos en un directorio determinado. Si ese es el caso, avíseme y editaré mi respuesta.

Tratar con duplicados con Python

Así que escribí un pequeño script en Python que creo que debería hacer el trabajo. Sin embargo, no estoy seguro de qué tan versado está en Python (si es que lo tiene), así que intentaré explicar cómo usar este script lo mejor que pueda y haga todas las preguntas que necesite al respecto.

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 debería ser relativamente sencillo 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 haya terminado, guarde el archivo como move.py en su directorio de inicio (puede ser cualquier directorio, pero para facilitar las instrucciones, 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, asegúrese de ingresar las rutas correctas al directorio de origen y destino y lo peor que podría suceder es que copie los archivos en el directorio incorrecto.

Notas

  • Este script asume 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 un nombre de archivo, la secuencia de comandos 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 / en el camino a la fuente
    directorio y ruta al directorio de destino. De lo contrario, el script le devolverá un error.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım