Tengo varios archivos nombrados como that : screenshot 13:25.png
Windows luchan por abrir estos archivos probablemente debido a ":".
¿Cómo puedo reemplazarlo?
Tengo varios archivos nombrados como that : screenshot 13:25.png
Windows luchan por abrir estos archivos probablemente debido a ":".
¿Cómo puedo reemplazarlo?
Respuestas:
En una terminal, cd
en el directorio correcto y luego ejecute esto.
rename 's/\:/-/g' *.png -vn
Esto hará una vista previa del cambio de nombre. Debe reemplazar :
con -
.
Si eso parece correcto, elimine el n
del final y luego hará el cambio de nombre real.
Nota : las versiones de Ubuntu anteriores a la 17.04 no se incluyen rename
, pero todavía está disponible en los repositorios predeterminados, así que úselo sudo apt install rename
para obtenerlo
n
) fácilmente.
rename 's/\:/-/g; s/%28/ /g; s/%29//g' ...
Aquí hay una solución de bash puro:
for i in *:*; do
mv "$i" "${i//:/_}"
done
El ${var//pattern/replacement}
formato reemplazará todas las apariciones de pattern
con replacement
en la variable $var
. Para obtener más información sobre las capacidades de manipulación de cadenas de bash, consulte aquí .
Si desea hacer esto para varios personajes, simplemente puede colocarlos en una clase de caracteres. Así, por ejemplo, para reemplazar a todos ;
, :
, =
, +
, %
, ,
con guiones bajos, usted podría hacer:
$ ls
1foo:bar 2foo:bar:baz 3foo;bar 4foo=bar 5foo%bar 6foo,bar 7foo+bar
$ for i in *; do mv "$i" "${i//[:;=%,+]/_}"; done
$ ls
1foo_bar 2foo_bar_baz 3foo_bar 4foo_bar 5foo_bar 6foo_bar 7foo_bar
Básicamente, la idea es que eso [ ]
significa any of the characters listed
. Por lo tanto, al colocar todos los personajes que desea reemplazar en la clase de personajes, todos se tratan a la vez.
Para los caracteres específicos que solicitó, las cosas son un poco más complejas porque algunos de ellos deben escaparse (estoy ignorando el hecho de /
que * nix no lo permite en los nombres de archivos más de lo que lo hace Windows, por lo que no será un problema):
$ ls
1foo<bar 2foo>bar 3foo:bar 4foo\bar 5foo|bar 6foo*bar 7foo?bar 8foo"bar 9foo'bar
$ for i in *; do mv "$i" "${i//[<>:\\|*\'\"?]/_}"; done
$ ls
1foo_bar 2foo_bar 3foo_bar 4foo_bar 5foo_bar 6foo_bar 7foo_bar 8foo_bar 9foo_bar
Tenga en cuenta que escapé del \
, '
y "
agregando un \
en frente de cada uno.
Si prefiere una GUI, instale pyrenamer:
sudo apt-get install pyrenamer
Luego ejecútalo:
pyrenamer
Tiene docenas de opciones para patrones y formatos de cambio de nombre.
Prefiero GUI pero como una extensión de Nautilus, es decir, Nautilus Actions Extra :
sudo add-apt-repository ppa:nae-team/ppa
sudo apt-get update
sudo apt-get install nautilus-actions-extra
nautilus -q
(Ver www.webupd8.org/2011/12/nautilus-actions-extra-pack-of-useful.html )
Luego, cuando selecciona archivos para cambiarles el nombre y hace clic en Cambiar nombre en el menú contextual, se le ofrecen muchas opciones para cambiar el nombre de los archivos.
El renameutils
paquete tiene un práctico programa llamado qmv
que proporciona un cambio de nombre de lote interactivo. Lo ejecuta en un directorio o una lista de archivos y genera un archivo de texto temporal que contiene sus nombres de archivo e inicia su editor favorito. Cuando salga del editor, cualquier nombre de archivo que haya cambiado se renombrará en consecuencia. qmv
convierte un problema de cambio de nombre de lote en un problema de edición de texto.
En este caso, puede usar qmv -f do *:*
para editar los nombres de todos los archivos que contienen dos puntos, y luego el :%s/:/_/g
comando en Vim (o una búsqueda y reemplazo correspondiente en cualquier editor que use).
La -f do
opción establece el formato del archivo de texto para que solo tenga el nombre del archivo de destino, lo que simplifica la búsqueda y reemplazo. El formato predeterminado tiene dos copias del nombre del archivo en cada línea, y solo edita la segunda. Eso le permite hacer lo correcto si ha eliminado o reordenado líneas en el archivo, pero no siempre es lo más fácil. También hay otros formatos.
Con qmv
, puede optar por canalizar el archivo generado a través de un comando de su elección, como, por ejemplo sed
, si no desea la capacidad interactiva.
Y aquí hay una secuencia de comandos Nautilus que reemplaza (¿todos?) Los caracteres incompatibles con Windows con un guión en todos los nombres de archivo seleccionados (según la respuesta de terdon ;-)
#!/bin/bash
filesall=""
while [ $# -gt 0 ]
do
files=`echo "$1" | sed 's/ /\?/g'`
filesall="$files $filesall"
shift
done
for i in $filesall; do mv "$i" "${i//[<>:\\|*\'\"?]/-}"; done
Thunar (el administrador de archivos XFCE) tiene una buena característica incorporada para renombrar archivos de forma masiva. Tiene opciones para eliminar / reemplazar caracteres, buscar y reemplazar, numerar archivos y más.
Instalar thunar:
sudo apt-get install thunar
Abra thunar, busque sus archivos, selecciónelos y elija 'cambiar nombre' (a través del menú contextual o F2)
@echo off
echo.
echo. How many Characters Do You Want To Remove
echo.
echo. From The End Of The FileName ?
echo.
echo.
set /p variable=" > "
setlocal enabledelayedexpansion
for /f "delims=" %%a in (' dir /b /a-d *.mp3') do (
set oldName=%%a
Set newName=!oldName:~0,-%variable%!.mp3
Ren "!oldName!" "!newName!"
)
exit