One-liner que se puede escribir fácilmente directamente desde la terminal:
for f in *.md; do mv "$f" "test - $f"; done
O reescrito en líneas separadas en lugar de punto y coma:
for f in *.md
do
mv "$f" "test - $f"
done
Exposición
Sintaxis de for
(in sh
):
for NAME [in WORDS ... ] ; do COMMANDS; done
Aquí, nuestro NAME
es f
y nuestro WORDS
son todos los archivos en el directorio actual *.md
. Por lo tanto, la variable $f
se sustituirá con cada archivo que coincida *.md
.
Entonces para a.md
:
mv "$f" "test - $f"
se convierte
mv "a.md" "test - a.md"
Las comillas son importantes porque cada nombre de archivo $f
puede contener espacios. De mv
lo contrario , pensaría que cada palabra era un archivo separado. Por ejemplo, si no hubiera comillas, y hay un archivo llamado Foo Bar.md
, se traduciría como:
mv Foo Bar.md test - Foo Bar.md
que no funcionaría según lo previsto. Pero al incluir $f
comillas, tiene sentido:
mv "Foo Bar.md" "test - Foo Bar.md"
Observando la sintaxis de for
, también puede cambiar el nombre de un subconjunto de todos los *.md
archivos nombrando cada uno explícitamente:
for f in a.md b.md d.md; do mv "$f" "Test - $f"; done
O usando la expansión de shell:
for f in {a,b,d}.md; do mv "$f" "Test - $f"; done
Si tienes
prename
...Usando comandos de shell ordinarios:
fuente
prename
?sudo apt-get install
)?mmv
1 , 2 también es una herramienta muy buena para tal tarea, aplicada al trabajo actual, seríaPor supuesto, si solo desea agregar "test -" a a.md, b.md y c.md, pero no a1.md, algo así como
Sería más apropiado.
Realmente puedo sugerirlo, especialmente si tienes muchos de esos problemas.
Si además está buscando una interfaz gráfica, pruebe gprename .
fuente
En lugar de usar un bucle for, que fallará en los espacios a menos que redefina la variable IFS, recomendaría usar un bucle while combinado con find. Lo siguiente funcionará cuando se ejecute desde el mismo directorio que los archivos
la línea "basename" está allí, de modo que find imprimirá solo el nombre del archivo, sin componentes de ruta, lo que haría que la operación de cambio de nombre se interrumpiera.
fuente
Sé que es realmente tarde, pero si alguien más está buscando algo como esto, entonces esto funcionó para mí:
fuente
Si tienes
zsh
disponible puedes usarzmv
:Puede probar el comando con:
-n
significa funcionamiento en seco, es decir, solo muestra lo que sucederá.-w
implícitamente pone paréntesis alrededor de comodines, hace que las referencias posteriores funcionen.fuente
En bash, agregando "Anteponer texto -" a todos los archivos en la carpeta:
fuente
for i in *; do mv "$i$" "Prepend text - $i"; done