2017-08-16 12 views
-3

Ich habe versucht, einige Dateien zu einer anderen Nebenstelle umzubenennen:Wie Dateien umbenennen mit Wildcard in bash?

# mv *.sqlite3_done *.sqlite3 

bekam aber einen Fehler:

mv: target '*.sqlite3' is not a directory 

Warum?

+1

ich denke, das hier beantwortet wurde: https://stackoverflow.com/questions/26519301/bash-error-renaming-files-with-spaces-mv -target-is-not-a-directory Sorgt es für Sie? – Grey

Antwort

1

Die Platzhaltererweiterung führt dazu, dass mehrere Namen an den Befehl übergeben werden. Die Shell denkt, dass Sie versuchen, mehrere Dateien in das Verzeichnis *.sqlite3 zu verschieben.

Sie benötigen eine Schleife verwenden:

for nam in *sqlite3_done 
do 
    newname=${nam%_done} 
    mv $nam $newname 
done 

Die %_done sagt das letzte Vorkommen von _done aus der Zeichenfolge zu entfernen.

Wenn Sie Leerzeichen in Ihren Dateinamen haben, sollten Sie die Dateinamen angeben.

4

mv kann nur mehrere Dateien in ein einzelnes Verzeichnis verschieben; es kann nicht jeden zu einem anderen Namen bewegen. Sie können stattdessen in der Bash-Schleife:

for x in *.sqlite3_done; do 
    mv "$x" "${x%_done}" 
done 

${x%_done} entfernt _done von Ende $x.

0

der einfache Weg ist die Verwendung finden

find . -type f -name '*.sqlite3_done' -exec sh -c 'x="{}"; mv "$x" "${x%_done}"' \; 
Verwandte Themen