Ich versuche, alle Vim-Auslagerungsdateien zu entfernen *.swp
und sie mit einer Bestätigung zu entfernen. Der find
Befehl hat die Dateien gefunden, rm
sagt aber No such file or directory
mit der -i
Option. Wenn ich den Pfad der Datei fest codiere und einfach verwende, rm -i
scheint es zu funktionieren.
Siehe unten
(doors)hobbes3@hobbes3 ~/Sites $ find mysite mysite_BAK -name *.swp -exec 'rm -i {}' \;
find: rm -i mysite/templates/.base.html.swp: No such file or directory
find: rm -i mysite/templates/doors/orders/.create.html.swp: No such file or directory
find: rm -i mysite/templates/doors/orders/.detail.html.swp: No such file or directory
find: rm -i mysite/templates/doors/orders/.list.html.swp: No such file or directory
(doors)hobbes3@hobbes3 ~/Sites $ rm -i mysite/templates/.base.html.swp
remove mysite/templates/.base.html.swp? n
Ich glaube, ich mache mit der -exec
Option etwas falsch. Irgendwelche Vorschläge? Vielen Dank im Voraus!
Antwort1
Der Fehler wird erzeugt durchfinden, nichtrm.
Der Grund ist, dass Sie es so geschrieben haben, dass es 'rm -i <file>'
das einzige Argument ist. Dies soll umgeschrieben werden:
find mysite mysite_BAK -name '*.swp' -exec rm -i '{}' \;
Daher erhält find mehrere Argumente nach „-exec“ und behandelt das erste als Befehl und die anderen als Befehlsargumente.
Antwort2
AKTUALISIERTE ANTWORT:
Wenn Sie Bash-Versionen >4.0 verwenden, können Sie die Globstar-Funktion nutzen. Das ist ganz einfach:
shopt -s globstar
rm -i **/*.swp
Dies funktioniert auch mit Dateinamen, die Leerzeichen enthalten!
Der shopt -s globstar
Teil aktiviert die rekursive **
Übereinstimmung in Bash. Sie können dies in Ihr Programm einfügen .bashrc
und für immer und ewig glücklich sein.
ALTE ANTWORT:
Normalerweise finde ich es einfacher, einfache Werkzeuge in Kombination zu verwenden
cd ins Verzeichnis und dann:
rm -i `find . | grep .swp$`
es ist einfacher zu merken (wenn die Leistung kein Problem ist)!
Warnung: Verwenden Sie dies nur, wenn Ihre Dateinamen keine Leerzeichen enthalten.
Antwort3
In deinem Fall würde ich laufen,
find mysite mysite_BAK -type f -name .\*.sw? -exec rm -i {} ";"
Die Auslagerungsdatei von VIM endet nicht nur mit .swp. Wenn .swp existiert, erstellt VIM .swo, dann .swn und so weiter. Außerdem werden Auslagerungsdateien mit einem Punkt (.) vorangestellt, z. B. .file1.rb.swp
Andere Möglichkeiten zum Suchen und Löschen der Auslagerungsdateien von VIM ohne Bestätigung (-i):
find some_dir -type f -name .\*.sw? | xargs rm
find some_dir -type f -name .\*.sw? -exec rm {} ";"
find some_dir -type f -name .\*.sw? -delete # -delete option does not work in Git Bash
Ohne „-type f“ würden Sie beim Löschen eines Verzeichnisses eine Fehlermeldung erhalten. Außerdem macht \
es .\*.sw?
in plattformübergreifend kompatibel.