Por ejemplo, yo quiero mv (.*?).sql $1.php
,
¿hay algún comando que me permita especificar patrones de cambio de nombre?
fuente
Por ejemplo, yo quiero mv (.*?).sql $1.php
,
¿hay algún comando que me permita especificar patrones de cambio de nombre?
Como otros han mencionado, rename
es bueno en esto, pero lea la página de manual ( man rename
) antes de intentarlo. Hay al menos dos herramientas completamente diferentes que se llaman rename
y cuál tendrá dependerá de su distribución. Llamarlos incorrectamente puede ser peligroso.
Aquí está la página del manual para la versión basada en Perl de Larry Wall que se incluye con Ubuntu. Le das una expresión perl comorename 's/\.sql$/.php/' *.sql
Aquí está la página del manual para el cambio de nombre que se distribuye con distribuciones anteriores de Red Hat y CentOS. El uso es una simple sustitución de cadena comorename .sql .php *.sql
También puede usar un bash one-liner para procesar cada archivo de uno en uno:
$ for f in *.sql; do mv -i "$f" "${f%%.*}.php"; done
rename
función (es decir, busybox)Hay
rename(1)
, que no usa expresiones regulares, pero puede resolver su problema:También hay
mmv(1)
, pero no estoy familiarizado con cómo funciona.fuente
/usr/bin/rename
enlaces a/usr/bin/prename
por defecto, que toma expresiones regulares.G'day
También podrías intentar ingresar
O para hacerlo usar regex's cámbialo ligeramente a
para un poco de diversión de codificación de shell. (-:
fuente
ls
debe analizar la salida .sed
embargo, el ejemplo es bastante bueno.Siendo fontanero, me gustan las pipas :)
Nota: esta respuesta es detallada: como nuevo aprendiz, agradezco que alguien que sabe se tome el tiempo de explicar, así que estoy pagando 'adelante'. Si no eres un novato, disculpa la longitud y la verbosidad.
Dónde:
enumera todos los archivos que coinciden con el patrón, en este caso estoy buscando archivos con la fecha en el nombre del archivo en el formulario 'AAAAMMDD'
^ 1: primer grupo de captura: el nombre de archivo completo
^ 2: 2do grupo de captura - la 1ra parte del patrón de nombre de archivo
^ 3: 3er grupo de captura - la 2da parte del nombre de archivo - aquí, la fecha como 'AAAAMMDD'
^ 4: 4to grupo de captura: parte opcional del nombre de archivo entre la fecha y la extensión, y la extensión misma
Sooooo .... si tengo un archivo llamado
...luego
en realidad significa
Tenga en cuenta que la salida del comando sed se canaliza a 'bash' para ejecutarlo. Para ver primero los movimientos del archivo propuesto SIN moverlos realmente, primero quite el '| bash 'al final, e inténtalo así:
Esto no hará ningún cambio en absoluto, pero verá el comando que se ejecutará SI lo ejecuta con '| bash 'etiquetado en el final.
Esto es útil porque puede crear cualquier subdirectorio que desee a partir de partes en el nombre del archivo, o cualquier otra cosa que agregue al texto de 'reemplazo' en el comando sed. Sin embargo, tenga en cuenta que sed requiere muchos caracteres de escape.
Soportes SED Regex:
(...) requieren escapar para la agrupación de captura -> \ (... \)
{m, n} requiere escapar para cuantificar el objeto anterior -> \ {m, n \}
/ requiere escapar en la cadena de reemplazo -> \ /
[...] NO requieren escapar para las clases de personajes
\ 1 en la cadena de reemplazo se refiere al primer grupo capturado, y así sucesivamente ...
ADVERTENCIA DE SEGURIDAD: NUNCA TUBE NADA PARA 'golpear' A MENOS QUE COMPRENDA TOTALMENTE EL RESULTADO ...
Espero que ayude a eliminar algunos bloqueos :)
fuente
Instalar
mmv
, luego haz esto:fuente