Tengo un valor de GB de música en mi HDD que fue formateada con EXT4. Quiero mover estos archivos a una partición HDD con formato FAT. Sin embargo, no puedo mover la mayoría de mis archivos porque tienen ":" en los nombres (por ejemplo, "Acto 2: ....." para las óperas). ¿Hay alguna manera con la línea de comando para cambiar el nombre de todos mis archivos de "XXXX: XXXX" a "XXXX-XXXX"?
fuente
find .
nombre de un subdirectorio precede a su contenido. Entonces, si tiene un archivo/1:/2:
primero,/1:/
se le cambiará el nombre/1-/
. Ahora no puede cambiar el nombre/1:/2:
a/1-/2-
porque/1:/2:
no existe.find . -type d -readable -writable -exec rename 's|:|-|g' {} \;
Y luego archivos:find . -type f -readable -writable -exec rename 's|:|-|g' {} \;
for i in {1..20}; do find . -maxdepth $i -mindepth $i -name "*:*" -exec rename 's|:|-|g' {} \;; done
. Cambie 20 a la profundidad máxima del directorio. estructura. No tiene que ser exacto, puede ser más grande. Sin embargo, llevará tiempo si se configura en un número muy grande.No estoy en mi máquina Linux en este momento, así que solo puedo dar información aproximada.
Linux tiene una utilidad de línea de comandos llamada
rename
que funciona con otras entradas, expresiones regulares o expresiones regulares. Debería poder usar eso junto con una expresión regular como "s /: / - /" en sus archivos para lograr el cambio de nombre que desea.Solo para estar seguro, hágalo en pequeños lotes y / o en la primera prueba con la simulación (el cambio de nombre tiene una bandera que solo le da el nombre antiguo y el nombre nuevo del archivo sin cambiar el nombre; use esto para verificar primero)
fuente
Esta es una solución en python que maneja el caso donde los archivos no están necesariamente en el mismo directorio.
rootdir
al directorio más externo en consideración (use el nombre de ruta completo que comience con /. No se permiten shorthands o variables de entorno como ~) No es necesario poner \ antes de caracteres especiales; por ejemplo, si el directorio más externo es /.../Mi HDD, pongarootdir = "/.../My HDD"
NOTrootdir = "/.../My\ HDD"
( tenga en cuenta las "s" [Estoy siendo explícito solo porque puede no estar familiarizado con Python. No faltar al respeto destinado a.]logfile
a la ubicación deseada del archivo de registro. Al final, este archivo contendrá la lista de archivos renombrados, para referencia futura.python rename.py
.Advertencia: haga una prueba en una muestra pequeña antes de arriesgar un GB completo de música.
Detalles: el cambio de nombre se realiza desde los archivos más internos hacia afuera.
fuente
Me doy cuenta de que esta es una publicación muy antigua. La solución recursiva de AeroGT80 es muy completa, pero es bastante lenta. Lo tuve funcionando durante aproximadamente media hora en un servidor más lento y solo completé la mitad, creo que fueron aproximadamente 73,000 archivos en aproximadamente 300 subdirectorios.
La solución a continuación funcionará mucho más rápido (funciona en todos los archivos en un directorio, en lugar de cada archivo uno por uno, utilizando la solución no recursiva de AeroGT80). El único problema es que solo baja un directorio de profundidad (por lo que no es totalmente recursivo como lo es su solución), pero estoy seguro de que podría modificarse con la suficiente facilidad.
fuente