Renombrar todos los archivos dentro de una carpeta con el prefijo «Unix_», es decir, supongamos que la carpeta tiene dos archivos a.txt y b.pdf, luego de que ambos se debería cambiar el nombre de un comando único para Unix_a.txt y Unix_b.pdf

InformationsquelleAutor vasanthi | 2011-06-13

8 Comentarios

  1. 90

    Si sus nombres de archivo que contienen no whitepace y usted no tiene los subdirectorios, usted puede utilizar un simple for bucle:

    $ for FILENAME in *; do mv $FILENAME Unix_$FILENAME; done 
    

    De lo contrario, utilice la práctica rename comando (que es un script en perl) – a pesar de que podría no estar disponible fuera de la caja en todos los Unix (por ejemplo, OS X no viene con rename).

    Un breve resumen en debian-administration.org:

    Si los nombres de archivo contiene espacios en blanco es más fácil de utilizar find, en Linux los siguientes trabajos:

    $ find . -type f -name '*' -printf "echo mv '%h/%f' '%h/Unix_%f\n'" | sh
    

    En sistemas BSD, no hay -printf opción, por desgracia. Pero GNU findutils debe ser instalable (por ejemplo, en Mac OS X con brew install findutils).

    $ gfind . -type f -name '*' -printf "mv \"%h/%f\" \"%h/Unix_%f\"\n" | sh
    
    • No funcionará si un archivo contiene un espacio
    • Gracias a la sugerencia: actualizado mi respuesta con una advertencia más dos ejemplos con find.
    • También recomendaría for f in *; do [[ -f ${f} ]] && mv ...; done para coger sólo los archivos (no sub-directorios, enlaces, etc.)…
    • Si usted cita variables como debe, entonces for FILENAME in *; do mv "$FILENAME" "Unix_$FILENAME"; done funciona correctamente independientemente de lo que los personajes están en los nombres de archivo. No mover los directorios, sockets, enlaces y otros tipos de archivos también; supongo que no importa.
    • esto funciona como un encanto!.
  2. 69

    Probar el rename comando en la carpeta con los archivos:

    rename 's/^/Unix_/' *
    

    El argumento de cambiar el nombre (sed s comando) indica para reemplazar el regex ^ con Unix_. El símbolo de intercalación (^) es un carácter especial que significa inicio de la línea de.

    • Podría explicar qué 's/^/.../' significa?
    • es el perl de expresión de argumento para la comando rename
    • esto es impresionante! te sugiero agregar la carpeta/* porque * es un poco peligroso si el comando accidentalmente se repite en otro lugar
    • rename: command not found en un Mac 🙁
  3. 25

    Creo que esto es justo lo que er buscando:

    ls | xargs -I {} mv {} Unix_{}
    

    Sí, es simple, elegante y potente, y alos oneline-comand de courese.
    Usted puede obtener información más detallada de la intro de mí en la página:Cambiar el nombre de Archivos y Directorios (Agregar Prefijo)

    • esto es lo que estoy buscando ….
    • Tenga cuidado de procesamiento de la salida de ls — puede llevar a problemas si hay espacios u otros personajes estrafalarios en los nombres de archivo.
  4. 11

    Recientemente he encontrado con esta misma situación y encontrar una forma más fácil intrínseca de la solución. Lo estoy compartiendo aquí, así que podría ayudar a otras personas que buscan solución.

    Con OS X Yosemite, Apple ha integrado el cambio de nombre por lotes capacidades directamente en el Finder. Los detalles de la información está disponible aquí. He copiado los pasos descritos a continuación así,

    Cambiar el nombre de varios elementos

    1. Seleccionar los elementos, a continuación, haga Control-clic en uno de ellos.

    2. En el menú contextual, seleccione cambiar el nombre de Elementos.

    3. En el pop-up menú de abajo cambiar el nombre de Elementos de la Carpeta, elija reemplazar texto en los nombres, añadir texto a los nombres, o cambiar el formato de nombre.

      • Reemplazar texto: Introduzca el texto que desea eliminar en el campo Buscar, escriba el texto que desee agregar en el «Reemplazar con» campo.

      • Añadir texto: Introduzca el texto que desea agregar en el campo, a continuación, elija agregar el texto antes o después del nombre actual.

      • Formato: Seleccione un formato de nombre de los archivos, a continuación, elija para poner el índice, contador, o la fecha antes o después del nombre. Introduzca un nombre en el campo Formato Personalizado, a continuación, introduzca el número que desea empezar.

    4. Haga Clic En Cambiar Nombre.

    Si usted tiene un patrón común en sus archivos de los que usted pueda Reemplazar texto de lo contrario, Añadir texto sería también hacer el trabajo.

    • Excelente, me salvó un montón de tiempo!
  5. 5

    Puedes usar -i en lugar de -I {}

    ls | xargs -i mv {} unix_{}
    

    Esto también funciona a la perfección.

    • ls – lista de todos los archivos en el directorio
    • xargs – acepta todos los archivos línea por línea, debido a la -i opción
    • {} es el marcador de posición para todos los archivos necesarios si xargs hace más de dos argumentos de entrada

    Usando awk:

    ls -lrt | grep '^-' | awk '{print "mv "$9" unix_"$9""}' | sh
    
    • -i está en desuso, ahora es sólo -I
    • me ha ayudado en Debian 8.Thaks
  6. 1

    También funciona para los elementos con espacios y hace caso omiso de los directorios

    for f in *; do [[ -f "$f" ]] && mv "$f" "unix_$f"; done
    
  7. 1

    Con rnm (usted tendrá que instalar):

    rnm -ns 'Unix_/fn/' *
    

    O

    rnm -rs '/^/Unix_/' *
    

    P. S : yo soy el autor de esta herramienta.

    • Usted debe ir a través de todas sus respuestas acerca de su utilidad, y agregar el descargo de responsabilidad que usted es su autor.
    • Yo no creo que de una información necesaria. Si alguien quiere encontrar al autor, es bastante fácil.
    • Gracias por esta herramienta. Por alguna razón, rename no funciona para mí, pero rnm hace.
  8. 0

    Situación:

    Hemos certificate.key certificate.crt dentro de /user/ssl/

    Queremos cambiar el nombre de algo que se inicia con certificate a certificate_OLD

    Ahora estamos ubicados en el interior de /user

    Primero, hacemos una marcha en seco con -n:

    rename -n "s/certificate/certificate_old/" ./ssl/*

    Que devuelve:

    rename(./ssl/certificate.crt, ./ssl/certificate_OLD.crt)
    rename(./ssl/certificate.key, ./ssl/certificate_OLD.key)

    Sus archivos será invariable esto es sólo una prueba de funcionamiento.

    Solución:

    Cuando tu feliz con el resultado de la ejecución de la prueba real:

    rename "s/certificate/certificate_OLD/" ./ssl/*

    Lo que significa:

    `cambiar el nombre de «s/ALGO /SOMETING_ELSE» RUTA de acceso/ARCHIVOS

    Sugerencia:

    Si usted ya está en el camino ejecute algo como esto:

    rename "s/certificate/certificate_OLD/" *

    O si desea hacer esto en cualquier sub-directorio de inicio con ss hacer:

    rename -n "s/certificat/certificate_old/" ./ss*/*

    También puede hacer:

    rename -n "s/certi*/certificate_old/" ./ss*/*

    Que cambia el nombre de cualquier cosa que empiece con certi en cualquier sub-directorio de inicio con ss.

    El cielo es el límite.

    Jugar con regex y SIEMPRE prueba esto ANTES con -n.

    VER ESTE INCLUSO CAMBIAR EL NOMBRE DE LOS NOMBRES DE LAS CARPETAS QUE COINCIDAN.
    Mejor cd en el directorio y hacerlo allí.
    UTILICE A SU PROPIO RIESGO.

Dejar respuesta

Please enter your comment!
Please enter your name here