Il completamento della scheda Bash dovrebbe essere in grado di fare la cosa giusta qui se digiti mv 90843_O
e premi tab. Altrimenti, un modo per sfuggire correttamente al nome è:
mv "90843_O\\\\'ConnorPaul_GeneralManager.jpg" dest.jpg
Le doppie virgolette rimuovono la necessità di sfuggire a '
, ma i due caratteri di barra rovesciata devono ancora essere sfuggiti (una barra rovesciata in più per ciascuna fa quattro barre rovesciate). Un'altra opzione è:
mv '90843_O\\'\'ConnorPaul_GeneralManager.jpg dest.jpg
Qui inserendo le barre rovesciate tra virgolette singole si elimina la necessità di sfuggirle, ma è necessario terminare le virgolette singole per aggiungere un valore letterale '
. Questo è evaso dopo la fine delle virgolette.
Nota che il problema qui ha a che fare con le barre rovesciate nel nome come la singola citazione. Per sostituire la \\'
sequenza (poiché ci sono due barre rovesciate nel nome file nella domanda, entrambe causeranno problemi) con un carattere di sottolineatura per tutti i file in una directory usando un ciclo:
for file in *"\\\\'"*; do
mv -i "$file" "${file//"\\\\'"/_}"
done
La -i
farà mv
pronta se tutti i file saranno sovrascritti. Utilizzo prename
( rename
collegamenti a questo su molti sistemi):
prename -n 's:\\\\'\'':_:g' *"\\\\'"*
Rimuovi -n
quando sei felice che sta facendo quello che vuoi. Si noti che i caratteri di barra rovesciata dovrebbero essere salvati all'interno dell'espressione perl qui, anche se ci sono virgolette singole intorno a loro (senza le virgolette singole sarebbero necessarie otto barre rovesciate poiché quattro sarebbero rimosse dalla shell e non faranno parte dell'espressione perl).
vidir
è una soluzione semplice a questo tipo di problemi.