Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Plotseling werkt `ls -f` anders?

0 views
Skip to first unread message

Adri Verhoef

unread,
Mar 21, 2009, 2:22:34 PM3/21/09
to
Voorheen gaf `ls -f` altijd eerst directorynaam en daarna directory-entry's,
echter nu - sinds ik upgradede van Fedora 8 naar Fedora 10 op 9 februari - is
`ls -f` zich anders gaan gedragen, waardoor een bepaald script (dat onderdeel
uitmaakt van C News) niet meer doet wat het moet doen (namelijk de usenetnews-
activefile updaten). (Voor de insiders: het gaat om het script 'upact'.)

Hier moet ik een oplossing voor zien te vinden. Heeft iemand goede suggesties?

sh-3.2$ echo ls -f nl/dranken/koffie/. nl/dranken/thee/.|sh
nl/dranken/koffie/.:
2006 1978 2000 1992 .. 1980 1981 . 1986 1983

nl/dranken/thee/.:
1498 .. 1515 . 1521 1507 1501 1495
sh-3.2$ ##########################################
sh-3.2$ # Hetzelfde, maar nu gefilterd door `cat`:
sh-3.2$ ##########################################
sh-3.2$ echo ls -f nl/dranken/koffie/. nl/dranken/thee/.|sh|cat
2006
1978
2000
1992
..
1980
1981
.
1986
1983
nl/dranken/koffie/.:
1498
..
1515
.
1521
1507
1501
1495

nl/dranken/thee/.:

Joost de Heer

unread,
Mar 21, 2009, 2:59:23 PM3/21/09
to
> Hier moet ik een oplossing voor zien te vinden. Heeft iemand goede suggesties?

'ls' is op mijn F10 bak een alias voor 'ls --color=auto', misschien
gooit dat roet in het eten. Wat is het resultaat als je 'ls' door
'/bin/ls' vervangt?

Joost

Wietse Muizelaar

unread,
Mar 21, 2009, 3:41:05 PM3/21/09
to

Nou, ls -f is:

do not sort, enable -aU, disable -ls --color

(zowel op Fedora 8 als 10)

--
Groet,
Wietse

Jeroen Scheerder

unread,
Mar 21, 2009, 3:47:02 PM3/21/09
to
Joost de Heer <joost@localhost> wrote:

> 'ls' is op mijn F10 bak een alias voor 'ls --color=auto', misschien
> gooit dat roet in het eten.

Dat lijkt me niet zo relevant, gegeven dat `ls -f' in een script,
`upact', aangeroepen wordt en niet in een interactieve shell.

Mijn $.02 is dat om een of andere reden de volgorde van files in de
directores gewijzigd is, eerder dan dat `ls -f' echt iets anders doet.

Adri Verhoef

unread,
Mar 21, 2009, 5:26:40 PM3/21/09
to
Aan het handschrift te zien was het Joost de Heer <joost@localhost> die schreef:

Hetzelfde:

sh-3.2$ echo /bin/ls -f nl/dranken/koffie/. nl/dranken/thee/.|sh|cat


2006
1978
2000
1992
..
1980
1981
.
1986
1983
nl/dranken/koffie/.:
1498
..
1515
.
1521
1507
1501
1495

nl/dranken/thee/.:
sh-3.2$ type ls
ls is hashed (/bin/ls)


Dit is de code waaruit het komt:
tr '.' '/' <active.upact |
awk 'BEGIN {
maxlen = '"$maxlen"'
dirs = ""
ndirs = 0
print "cd '"$NEWSARTS"'"
}
length($1) + length(dirs) > maxlen && ndirs > 0 {
if (ndirs == 1)
print "echo " substr(dirs, 2) ":"
print "ls -f" dirs
dirs = ""
ndirs = 0
}
# the /. on the end eliminates problems with names including ":"
{ dirs = dirs " " $1 "/." ; ndirs++ }
END {
if (ndirs == 1)
print "echo " substr(dirs, 2) ":"
print "ls -f" dirs
print "echo /.:" # simplifies later logic
}' | sh |

(gevolgd door verdere bewerking van deze data).

Het gaat erom dat per directory het hoogste (grootste) getal wordt gevonden.
Elke filenaam is ofwel een geheel getal of een directorynaam.
Zo is er onderscheid tussen nl/newsgroups/announce en nl/newsgroups/345 .

Adri

Adri Verhoef

unread,
Mar 21, 2009, 5:51:41 PM3/21/09
to
Aan het handschrift te zien was het Jeroen Scheerder <j...@xs4all.nl> die schreef:

Gedurende de loop der tijden verdwijnen er files en komen er nieuwe bij,
de nieuwere hebben een filenaam die bestaan uit een hoger nummer.

Ik zal het `ls -f`-probleem nog even verduidelijken a.d.h.v. een voorbeeld;
nu zonder `cat`, maar met en zonder de optie -1 van `ls`:

=====================
sh-3.2$ echo /bin/ls -f nl/dranken/koffie nl/dranken/thee|sh
nl/dranken/koffie:


2006 1978 2000 1992 .. 1980 1981 . 1986 1983

nl/dranken/thee:


1498 .. 1515 . 1521 1507 1501 1495

sh-3.2$ echo /bin/ls -f1 nl/dranken/koffie nl/dranken/thee|sh


2006
1978
2000
1992
..
1980
1981
.
1986
1983

nl/dranken/koffie:


1498
..
1515
.
1521
1507
1501
1495

nl/dranken/thee:
=====================


Zo bezien is

echo ls -f ... | sh | cat

(zie mijn eerste bericht <KGvCD...@news.a3.xs4all.nl> uit deze draad)
eigenlijk een imitatie van

echo ls -f1 ... | sh


Ik denk dat ik `ls -f | tr ' ' '\012'` o.i.d. moet gaan gebruiken.

Adri

Jeroen Scheerder

unread,
Mar 22, 2009, 2:09:40 AM3/22/09
to
Adri Verhoef <a...@news.a3.xs4all.nl> wrote:

> Ik denk dat ik `ls -f | tr ' ' '\012'` o.i.d. moet gaan gebruiken.

Hm, als het je om de volgorde gaat, waarom dan niet

ls -1

of, als lexicografisch sorteren niet voldoet,

ls -1 | sort -n

of, als het in omgekeerde volgorde moet,

ls -1 | sort -r

of

ls -1 | sort -rn

?

Adri Verhoef

unread,
Mar 22, 2009, 7:27:07 AM3/22/09
to
Aan het handschrift te zien was het Jeroen Scheerder <j...@xs4all.nl> die schreef:

Voor elke directory een `sort`? Dat sluit niet aan bij de rest van de code.

Adri

Rob

unread,
Mar 22, 2009, 7:49:09 AM3/22/09
to
Adri Verhoef <a...@news.a3.xs4all.nl> wrote:
> Voor elke directory een `sort`? Dat sluit niet aan bij de rest van de code.

Dat kan nooit een probleem zijn. De huidige code maak unsorted directory
listings en kan daar mee werken, dus die kan nooit op tilt gaan als de
directories toch gesorteerd blijken te zijn.

Misschien is het beter om te kijken wat die scriptkermis nou uiteindelijk
doet en dit even te herbouwen in perl. Als je handig bent in perl dan
is dat zo klaar.
Zo'n script dat bestaat uit een hele pipeline van tooltjes en allerlei
slimme truukjes dat blijft altijd wat kwetsbaar. Is niet de eerste keer
dat zo iets plotseling omvalt.

0 new messages