Quiero escribir un script para encontrar todos los archivos que terminan en .cpp
y cambiarles el nombre como .cc
. La búsqueda se realizará de forma recursiva desde una ruta inicial R, que es el argumento del script.
Si no se escribe ningún argumento, R será el directorio real.
Y he escrito:
#!/bin/bash
R=.
if [[ $# == 1 ]]
then
echo "$# == 1"
if [[ -d $1 ]]
echo "$1 is directory"
then
R=$1
else
printf "Error $1 should be a directory"
exit 1
fi
find $R -name "*.cpp" -exec sh -c 'mv {} $(dirname {})${$(basename {})%.cpp}".cc" ' \;
exit 0
else
printf "Invocation is: $0 directory"
exit 1
fi
Pero sé que tengo problemas en la línea de búsqueda porque no sé cómo expresarQuiero eliminar la extensión y agregar la nueva cuando uso {}
Respuesta1
No hagas tal cosa operando directamente en {}
.
Ha usado inline sh
, así que páselo {}
como argumento y tampoco necesita usarlo basename
en absoluto:
find "$R" -name "*.cpp" -type f -exec sh -c '
for f do
mv -- "$f" "${f%.*}.cc"
done
' sh {} +
Tenga en cuenta que debe poner comillas dobles $R
; de lo contrario,conduce a una seguridad vulnerable.