Hallo,
Wie lautet in der UNIX-Shell der Befehl dafür, dass folgender Befehl nur ausgeführt wird, wenn in dem Ordner mindestens eine Datei mit dem Dateinamensanfang „ab#“ vorliegt?
mv /Users/martin/Desktop/Test/ab#* /Users/martin/Desktop/Test/abeinsortiert
Danke,
Martin
Hallo Martin,
ich vermute mal, dass ‚abeinsortiert‘ ein existierendes Directory ist (ansonsten würden ja alle Files auf ein File bewegt…).
Mein Vorschlag (ungetestet)
ls /Users/martin/Desktop/Test/ab#\* \> /dev/null && \
mv /Users/martin/Desktop/Test/ab#\* /Users/martin/Desktop/Test/abeinsortiert
gruss
bernhard
Hallo Bernhard,
ich vermute mal, dass ‚abeinsortiert‘ ein existierendes
Directory ist (ansonsten würden ja alle Files auf ein File
bewegt…).
Ja, ist es.
Mein Vorschlag (ungetestet)
ls /Users/martin/Desktop/Test/ab#* > /dev/null &&
mv /Users/martin/Desktop/Test/ab#*
/Users/martin/Desktop/Test/abeinsortiert
Klappt leider nicht, der move-befehl wird auch dann ausgeführt, wenn keine Datei mit dem Anfang ab# vorliegt.
Gruß,
Martin
Hallo,
„eigentlich“ ein klassischer Fall für „find“
http://www.linux-fuer-blinde.de/91-0-dateien-aufspue…
Beispiel (Achtung: NICHT getestet!):
find /Users/martin/Desktop/Test -name ‚ab*‘ -print -exec mv ‚{}‘ /Users/martin/Desktop/Test/abeinsortiert ;
sollte so laufen. Da „abeinsortiert“ ja auch die Bedingung ab* erfüllt, gibt es eine Fehlermeldung, da der Eintrag ja nicht in sich selbst verschoben werden kann. Ändert aber nichts am Ergebnis.
Kann man natürlich viel eleganter machen, allein: momentan fehlt mir die Zeit.
Viel Erfolg.
tf
Hallo Martin,
das klappt schon - nicht der move-Befehl wird ausgeführt, nur das ls macht noch eine Fehlerausgabe (nicht nach STDOUT, sondern nach STDERR). Ich hätte auch STDERR nach /dev/null umleiten müssen (siehe unten 2>&1 ). Jetzt hab ich es mal bei mir getestet, und so geht es:
bbr@bbvbub1010:~/tmp$ ll
insgesamt 12
drwxr-xr-x 3 bbr bbr 4096 2010-11-03 20:20 ./
drwxr-xr-x 26 bbr bbr 4096 2010-11-03 20:18 ../
-rw-r--r-- 1 bbr bbr 0 2010-11-03 20:18 1
-rw-r--r-- 1 bbr bbr 0 2010-11-03 20:18 2
-rw-r--r-- 1 bbr bbr 0 2010-11-03 20:18 3
-rw-r--r-- 1 bbr bbr 0 2010-11-03 20:20 ab#3
drwxr-xr-x 2 bbr bbr 4096 2010-11-03 20:19 abeinsortiert/
bbr@bbvbub1010:~/tmp$ ls ab#\* \> /dev/null 2\>&1 && mv ab#\* abeinsortiert
bbr@bbvbub1010:~/tmp$ ll abeinsortiert/
insgesamt 8
drwxr-xr-x 2 bbr bbr 4096 2010-11-03 20:21 ./
drwxr-xr-x 3 bbr bbr 4096 2010-11-03 20:21 ../
-rw-r--r-- 1 bbr bbr 0 2010-11-03 20:18 ab#1
-rw-r--r-- 1 bbr bbr 0 2010-11-03 20:19 ab#2
-rw-r--r-- 1 bbr bbr 0 2010-11-03 20:20 ab#3
bbr@bbvbub1010:~/tmp$ ls ab#\* \> /dev/null 2\>&1 && mv ab#\* abeinsortiert
bbr@bbvbub1010:~/tmp$
gruss
bernhard
Noch eine Spielerei, die find-Variante oben sollte robuster sein:
ls ab#*|while read fn; do [-f $fn] && mv $fn abeinsortiert; done
Gruß Lutz
1 „Gefällt mir“
Es ist erstmal nett, dass ihr mir alle versucht zu helfen, aber leider funktioniert keines der Skripte. In der Windows-Batch habe ich das immer mit einer for-Schleife gemacht, die wie folgt aussah:
cd /Users/martin/Desktop/Test & for /f "tokens=2 delims=#" %%a in ('dir /b ab#\*') do move /Users/martin/Desktop/Test/ab#\* /Users/martin/Desktop/Test/#abeinsortiert
Gibt es so etwas ähnliches in der UNIX-Shell?
Gruß,
Martin
Hi,
nochmal oben beginnend: Was ist die Ausgangssituation? Wie sieht der relevante Teil der Verzeichnisstruktur aus? Soll automatisch über diesen Teil iteriert werden?
Wie relevant ist der move-Befehl, ist das einfach nur ein Beispielkommando?
Könntest Du sowas einfaches wie
if ls ab#*; then command; else echo „File not found“; fi
suchen, wobei command durch die gewünschte Aktion zu ersetzen ist?
Gruß Lutz