Antworten:
Bash hat das Globbing verlängert (zuerst testen, dann das Echo entfernen):
shopt -s extglob
echo rm -rf !(A)
shopt | grep ext
Sie können sehen, ob das Plugin aktiviert ist.
Wie wäre es mit:
mv A /tmp/
rm * -rf
mv /tmp/A .
Dies vermeidet die "Knappheit" eines Tippfehlers in den anderen Befehlen.
Etwas wie
find . -type d -not -name A -exec rm -ir {} \;
sollte tun.
bearbeiten
Es sollte wirklich so sein
find . -type d -maxdepth 1 -not -name A -exec rm -ir {} \;
um ein find
Wiederauftreten unter A zu verhindern .
Normalerweise mache ich das, indem ich einen ls-Befehl ausarbeite, der es zuerst richtig macht. Ich bin nicht auf einer Unix-Maschine, aber so etwas wie:
ls -lda "[^ A]"
Sobald Sie es richtig verstanden haben, leiten Sie es an einen Befehl weiter
ls -lda "[^ A]" | xargs rm -rf
Fühlen Sie sich frei, oben zu bearbeiten, wenn ich meinen regulären Ausdruck falsch habe ...
Hier ist eine Möglichkeit. Seien Sie vorsichtig mit solchen Dingen, sie sind jedoch so mächtig, dass sie nur zum Guten oder Bösen verwendet werden können ...
find * -Typ d | grep -v "^ A" | xargs rm -rf
Verwenden Sie find nicht, wie einige Leute mit -exec und rm gezeigt haben, ohne -print0 zu übergeben und -0 an xargs zu übergeben. Dateinamen werden mit Leerzeichen oder Zeilenumbrüchen verwechselt:
$ mkdir 'foo foo'
$ mkdir foo$'\n'foo
$ find . -type d -exec rm -ir {} \;
rm: cannot remove directory `.'
rm: remove directory `./foo\nfoo'? y
find: `./foo\nfoo': No such file or directory
rm: remove directory `./foo foo'? y
find: `./foo foo': No such file or directory
Verwenden Sie stattdessen find -print0 mit xargs -0, '-exec command {} +' oder -delete, wenn Ihr find dies unterstützt.