Löschen Sie alle Dateien und Verzeichnisse, sondern bestimmten mithilfe von Bash
Ich bin ein Skript schreiben muss, um alles zu löschen von einem Verzeichnis-mit Ausnahme von zwei Verzeichnissen, mysql und temp.
Habe ich versucht, dieses:
ls * | grep -v mysql | grep -v temp | xargs rm -rf
aber das hält auch alle Dateien, die mysql in Ihrem Namen, dass ich nicht brauchen. es ist auch nicht zu löschen, alle anderen Verzeichnisse.
irgendwelche Ideen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie versuchen:
Ist POSIX definiert:
Hinweis: Bitte, nehmen Sie sich Zeit, es erstmal zu testen! Entweder erstellen Sie einige test-Ordner, oder einfach
echo
die parameter-substitution, als ordnungsgemäß festgestellt durch @mnagel:Hinzufügen nützliche Informationen: wenn das matching ist nicht aktiv, können Sie aktivieren/deaktivieren es mit:
echo
wie inecho !(mysql|init)
shopt -s extglob
Finden Sie unter stackoverflow.com/questions/216995/....svn
oder.git
oder simliarDies ist normalerweise ein job für
find
. Versuchen Sie den folgenden Befehl (fügen Sie-rf
wenn Sie ein Rekursives löschen):(Das ist, finden Sie Einträge in
.
aber nicht in den Unterverzeichnissen, nicht [namensmysql
oder benannttmp
] und rufen Sierm
auf Sie.)maxdepth
option. Entfernen Sie die-exec rm '{}' \;
um eine Liste der passenden Dateien, die nicht enthalten, was unter./
..
als gut, so dass, wenn Sie ausführenrm -Rf
könnte möglicherweise löschen mehr, als Sie wollen...Können Sie finden, ignorieren, mysql und temp, und dann rm -rf Ihnen.
find . -maxdepth 1 ! -iname mysql ! -iname temp -exec rm -rf {} \;
oder noch besserfind . -maxdepth 1 ! -iname mysql ! -iname temp -delete