J'ai plusieurs fichiers nommés comme that : screenshot 13:25.png
Windows ont du mal à ouvrir ces fichiers probablement à cause du ":".
Comment puis-je le remplacer?
J'ai plusieurs fichiers nommés comme that : screenshot 13:25.png
Windows ont du mal à ouvrir ces fichiers probablement à cause du ":".
Comment puis-je le remplacer?
Réponses:
Dans un terminal, cd
dans le bon répertoire, puis exécutez-le.
rename 's/\:/-/g' *.png -vn
Cela prévisualisera le changement de nom. Il devrait remplacer :
par -
.
Si cela semble correct, supprimez le n
de la fin, puis il fera le changement de nom réel.
Remarque : les versions d'Ubuntu supérieures à 17.04 ne sont pas livrées avec rename
, mais elles sont toujours disponibles dans les référentiels par défaut, donc utilisez-les sudo apt install rename
pour l'obtenir
n
) facilement.
rename 's/\:/-/g; s/%28/ /g; s/%29//g' ...
Voici une solution bash pure:
for i in *:*; do
mv "$i" "${i//:/_}"
done
Le ${var//pattern/replacement}
format remplacera toutes les occurrences de pattern
avec replacement
dans la variable $var
. Pour plus d'informations sur les capacités de maipulation de chaînes de bash, voir ici .
Si vous voulez faire cela pour plusieurs personnages, vous pouvez simplement les placer dans une classe de personnages. Ainsi, par exemple, de remplacer tous ;
, :
, =
, +
, %
, ,
avec des underscores, vous pouvez le faire:
$ 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
Fondamentalement, l'idée est que cela [ ]
signifie any of the characters listed
. Ainsi, en plaçant tous les personnages que vous souhaitez remplacer dans la classe de personnages, tous sont traités en même temps.
Pour les caractères spécifiques que vous avez demandés, les choses sont un peu plus complexes car certains d'entre eux doivent être échappés (j'ignore le /
puisque * nix ne le permet pas dans les noms de fichiers plus que Windows ne le fait donc ce ne sera pas un problème):
$ 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
Notez que j'ai échappé au \
, '
et "
en ajoutant un \
devant chacun.
Si vous préférez une interface graphique, installez pyrenamer:
sudo apt-get install pyrenamer
Exécutez-le ensuite:
pyrenamer
Il a des dizaines d'options pour les modèles et les formats de renommage.
Je préfère l' interface graphique mais en tant qu'extension Nautilus, c'est -à- dire Nautilus Actions Extra :
sudo add-apt-repository ppa:nae-team/ppa
sudo apt-get update
sudo apt-get install nautilus-actions-extra
nautilus -q
(Voir www.webupd8.org/2011/12/nautilus-actions-extra-pack-of-useful.html )
Ensuite, lorsque vous sélectionnez les fichiers à renommer et cliquez sur Renommer dans le menu contextuel, de nombreuses options vous sont proposées pour renommer les fichiers.
Le renameutils
package a un programme pratique appelé qmv
qui fournit un changement de nom interactif par lots. Vous l'exécutez sur un répertoire ou une liste de fichiers, et il génère un fichier texte temporaire contenant leurs noms de fichier et démarre votre éditeur préféré. Lorsque vous quittez l'éditeur, tous les noms de fichiers que vous avez modifiés sont renommés en conséquence. qmv
transforme un problème de renommage par lots en un problème d'édition de texte.
Dans ce cas, vous pouvez utiliser qmv -f do *:*
pour modifier les noms de tous les fichiers contenant deux points, puis la :%s/:/_/g
commande dans Vim (ou une recherche et remplacement correspondante dans l'éditeur que vous utilisez).
L' -f do
option définit le format du fichier texte pour avoir le nom de fichier de destination uniquement, ce qui rend la recherche et le remplacement plus simple. Le format par défaut comporte deux copies du nom de fichier sur chaque ligne et vous ne modifiez que le second. Cela lui permet de faire la bonne chose si vous avez supprimé ou réorganisé des lignes dans le fichier, mais ce n'est pas toujours le plus simple. Il existe également d'autres formats.
Avec qmv
, vous pouvez choisir de diriger le fichier généré via une commande de votre choix, par exemple sed
, si vous ne voulez pas la fonctionnalité interactive.
Et voici un script Nautilus qui remplace (tous?) Les caractères incompatibles avec Windows par un trait d'union dans tous les noms de fichiers sélectionnés (basé sur la réponse 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 (le gestionnaire de fichiers XFCE) a une fonctionnalité intégrée intéressante pour renommer en vrac les fichiers. Il a des options pour supprimer / remplacer les caractères, rechercher et remplacer, numéroter les fichiers et plus encore.
Installez thunar:
sudo apt-get install thunar
Ouvrez thunar, accédez à vos fichiers, sélectionnez-les et choisissez «renommer» (via le menu contextuel ou 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