Thread Multiple Files in Shell testen? (19 answers)
Opened by kami at 2010-03-22 07:47

topeg
 2010-03-22 13:41
#135144 #135144
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Ja das:
Code: (dl )
ls /pfad | grep name
funktioniert, aber nicht immer. bei gnu-ls funktioniert es, da es erkennt, ob es an eine Pipe weiterleitet oder die Shell.

Code: (dl )
1
2
3
ls /
bin cdrom etc initrd initrd.img.old lost+found mnt root selinux sys usr vmlinuz
boot dev home initrd.img lib media proc sbin srv tmp var vmlinuz.old


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
ls / | cat -
bin
boot
cdrom
dev
etc
home
initrd
initrd.img
initrd.img.old
lib
lost+found
media
mnt
proc
root
sbin
selinux
srv
sys
tmp
usr
var
vmlinuz
vmlinuz.old


Das ls von anderen Systemen muss sich aber nicht so verhalten. Bei älteren Unixen muss man eine Option hinten anfügen um "\n" als trenner zu erzwingen.

Weiterhin gibt es Probleme wenn ein Dateiname selber "\n" enthält, das bringt grep völlig durcheinander theoretisch kann man auch \000 als Trenner verwenden, aber nicht alle ls Implementierungen können das ausgeben. (gnu ls hat keine Option dafür)

Es ist nicht ganz einfach auf der Shell.
mache niemals so was:
Code: (dl )
for i in $(ls); do file $i; done;
da kommt Müll raus, wenn ein Dateiname Leerzeichen oder Tabs oder Newlines enthält.
Das dagegen funktioniert:
Code: (dl )
for i in *; do file $i; done;
hier sorgt die Shell selber für den richtigen Trenner.

View full thread Multiple Files in Shell testen?