Tengo una colección de archivos que coinciden con un patrón, como 'ejercicio02.cc', 'ejercicio02.h', 'ejercicio02.txt', etc. Me gustaría copiar / renombrar estos archivos en 'trabajo03.cc', 'trabajo03. h ',' task03.txt ', y así sucesivamente.
Sospecho que esto debería ser sencillo usando un script de shell y sed. Hasta ahora tengo:
OLD_NO=$1
NEW_NO=$2
echo "Moving from $OLD_NO to $NEW_NO"
for name in assignment$OLD_NO.* ; do
newname=$(echo $name | sed 's/\(.*\)$OLD_NO\(.*\)/\1xx$NEW_NO\2/')
echo "$name -> $newname"
# mv -v $name $newname
done
Desafortunadamente, la forma en que estoy invocando sed siempre devuelve la cadena de entrada $name
y en realidad no hace que la expresión regular busque / reemplace.
Nota: en Internet hay un rename
comando que tiene esta funcionalidad, pero que no está disponible en mi MacBook.
shell-script
sed
file-management
rename
Gilles 'SO- deja de ser malvado'
fuente
fuente
$OLD_NO
y$NEW_NO
no se amplió.newname=$(echo $name | tr $OLD_NO $NEW_NO)
Respuestas:
Usar sed aquí introduce más complejidad de lo que vale. Use las funciones de manipulación de texto incorporadas en el shell. Por ejemplo,
${name#assignment02}
quita el prefijoassignment02
de$name
.Las comillas dobles no son necesarias si está seguro de que los nombres de los archivos no contienen caracteres especiales de shell.
Si tiene disponible zsh, su
zmv
función es útil para este tipo de modificaciones.fuente
Ya estás pensando demasiado complejo
'rename' reemplaza el primer arg ('02') con el segundo arg ('03') en el nombre de todos los archivos dados en arg3 o después (* 02 *)
fuente
rename
comando con esta sintaxis es una utilidad de Linux, no disponible en OSX (y ni siquiera disponible con este nombre en la mayoría de las instalaciones de Debian y Ubuntu).Un enfoque diferente:
A la larga: intente obtener 'cambiar el nombre'
fuente
Una forma de hacerlo es:
fuente
ls
. Y generar un script de shell es una forma segura de dispararte en la cabeza. La pregunta de Vault Boy contiene un enfoque razonable en el lado del caparazón, solo falta el encantamiento de sed correcto y algunas citas.