Ho più file denominati come that : screenshot 13:25.png
Windows che fatica ad aprire questi file probabilmente a causa del ":".
Come posso sostituirlo?
Ho più file denominati come that : screenshot 13:25.png
Windows che fatica ad aprire questi file probabilmente a causa del ":".
Come posso sostituirlo?
Risposte:
In un terminale, cdnella directory giusta ed eseguirlo.
rename 's/\:/-/g' *.png -vn
Questo visualizzerà in anteprima la ridenominazione. Dovrebbe sostituire :con -.
Se sembra corretto, rimuovi il ndalla fine e quindi farà la rinomina reale.
Nota : le versioni di Ubuntu precedenti alla 17.04 non vengono fornite con rename, ma è ancora disponibile nei repository predefiniti, quindi utilizzare sudo apt install renameper ottenerlo
n) facilmente.
rename 's/\:/-/g; s/%28/ /g; s/%29//g' ...
Ecco una soluzione bash pura:
for i in *:*; do
mv "$i" "${i//:/_}"
done
Il ${var//pattern/replacement}formato sostituirà tutte le occorrenze di patterncon replacementnella variabile $var. Per ulteriori informazioni sulle capacità di manipolazione delle stringhe di bash, vedere qui .
Se vuoi farlo per più personaggi, puoi semplicemente metterli in una classe di personaggi. Così, per esempio, per sostituire tutti ;, :, =, +, %, ,con sottolineature, si potrebbe fare:
$ 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
Fondamentalmente, l'idea è che [ ]significa any of the characters listed. Quindi, posizionando tutti i personaggi che si desidera sostituire nella classe di personaggi, tutti vengono affrontati contemporaneamente.
Per i caratteri specifici che hai chiesto, le cose sono un po 'più complesse perché alcuni di loro devono essere salvati (sto ignorando il /poiché * nix non lo consente nei nomi di file non più di Windows, quindi non sarà 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
Nota che sono sfuggito a \, 'e "aggiungendo un \davanti a ciascuno.
Se preferisci una GUI, installa pyrenamer:
sudo apt-get install pyrenamer
Quindi eseguilo:
pyrenamer
Ha dozzine di opzioni per motivi e formati di rinomina.
Preferisco la GUI ma come estensione di Nautilus, ovvero Nautilus Actions Extra :
sudo add-apt-repository ppa:nae-team/ppa
sudo apt-get update
sudo apt-get install nautilus-actions-extra
nautilus -q
(Vedi www.webupd8.org/2011/12/nautilus-actions-extra-pack-of-useful.html )
Quindi quando selezioni i file da rinominare e fai clic su Rinomina dal menu contestuale, ti vengono offerte molte opzioni per rinominare i file.
Il renameutilspacchetto ha un pratico programma chiamato qmvche fornisce la ridenominazione batch interattiva. Lo esegui in una directory o in un elenco di file, genera un file di testo temporaneo contenente i nomi dei file e avvia l'editor preferito. Quando si esce dall'editor, tutti i nomi di file modificati vengono rinominati di conseguenza. qmvtrasforma un problema di ridenominazione batch in un problema di modifica del testo.
In questo caso, puoi usare qmv -f do *:*per modificare i nomi di tutti i file che contengono due punti e quindi il :%s/:/_/gcomando in Vim (o un corrispondente cerca e sostituisci in qualunque editor tu usi).
L' -f doopzione imposta il formato del file di testo in modo che abbia solo il nome del file di destinazione, il che semplifica la ricerca e la sostituzione. Il formato predefinito ha due copie del nome del file su ciascuna riga e si modifica solo la seconda. Ciò gli consente di fare la cosa giusta se hai eliminato o riordinato le righe nel file, ma non è sempre il più semplice. Ci sono anche altri formati.
Con qmv, puoi invece scegliere di reindirizzare il file generato tramite un comando di tua scelta, ad esempio sed, se non desideri la funzionalità interattiva.
Ed ecco uno script Nautilus che sostituisce (tutti?) Caratteri incompatibili con Windows con un trattino in tutti i nomi di file selezionati (basato sulla risposta di 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 (il gestore di file XFCE) ha una bella funzionalità integrata per rinominare i file in blocco. Ha opzioni per rimuovere / sostituire caratteri, cercare e sostituire, numerare i file e altro.
Installa thunar:
sudo apt-get install thunar
Apri thunar, cerca i tuoi file, selezionali e scegli 'rinomina' (tramite il menu contestuale 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