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?
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?
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.
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
.
der einfache Weg ist die Verwendung finden
find . -type f -name '*.sqlite3_done' -exec sh -c 'x="{}"; mv "$x" "${x%_done}"' \;
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