Используйте это:
vishex ()
{
[ -e "$1" ] || echo -e '#!/bin/bash\n\n' > "$1";
chmod +x "$1";
vi "+normal G" +startinsert "$1"
}
[ -e "$1" ]
проверяет, существует ли уже скрипт. Если да, то echo
не отменит его. -e
в echo позволяет интерпретировать обратные косые черты, например \n
для новой строки. Затем он вставляет 2 новые строки после строки shebang. +normal G
запускает команду ex G
, которая переходит к последней строке в файле. +startinsert
переключает непосредственно в режим вставки (можно и оставить, так как в вопросе это не упоминается). Итак, при выполнении vishex script
это выглядит так:
#!/bin/bash
<- cursor is here
~
[...]
~
-- INSERT -- 3,1 All
\
es un operador de comillas en la sintaxis de shell por lo que:
rename s/\(Done\)//g *
Es lo mismo que correr:
rename 's/(Done)//g' *
Y (
, )
son caracteres especiales en la sintaxis de expresiones regulares de perl (que rename
usa )y deben tener el prefijo\
(o cambiarse a [(]
y[)]
)por lo que son tratados literalmente.
Así que aquí, quieres:
rename 's/\s*\(Done\)//g'./*
Aquí también se agrega \s*
para eliminar cualquier espacio en blanco antes de (Done)
, y un prefijo ./
ya que algunas variantes de rename
ahogarían los nombres de archivo que comienzan con -
.
Usandofind
:
find topdir -maxdepth 1 -type d -name '* (Done)' -exec sh -c '
for pathname do
mv "$pathname" "${pathname%" (Done)"}"
done' sh {} +
Esto usa find
para seleccionar los directorios que tienen ␣(Done)
al final de sus nombres y luego usa una sustitución de parámetro estándar para eliminar esa cadena.
No se realiza ninguna verificación para asegurarse de que no haya un directorio/archivo con el nombre de destino en el mismo directorio.
La secuencia de comandos sh -c
anterior obviamente también podría ejecutarse por sí misma,con modificaciones menores para hacer las pruebas que find
hizo para él:
for pathname in topdir/*' (Done)'/; do
mv "$pathname" "${pathname%' (Done)/'}"
done
Это должно работать:
rename 's/\(.*\)|\[.*\]//g' *
В противном случае без использования команды rename
(OT):
for file in folder*; do
mv "$file" "${file/\(Done\)/}"
done