Portál AbcLinuxu, 4. prosince 2025 21:31
Už vážně netuším proč to nevypisuje to co má. Díky za případnou pomoc.
#!/bin/bash
for DIR in $(ls /home/virt/)
do
for FILE in $(ls /home/virt/$DIR/cnf/)
do
echo "/home/virt/$DIR/$FILE"
done
done
#!/bin/bash
OLDIFS=IFS
IFS='
'
for DIR in $(ls -1 '/home/virt/')
do
for FILE in $(ls -1 "/home/virt/$DIR/cnf/")
do
echo "/home/virt/$DIR/$FILE"
done
done
IFS=OLDIFS
Jinak netuším proč dáváš do ls -1 a k čemu je dobrý OLDIFS=IFS IFS='' a IFS=OLDIFSJinak je výsledek úplně stejný, nejede to.
ls: cannot access /home/virt/...... ......./cnf/: No such file or directoryVšechny adresáře opravdu existuji...
Aby to vypisovalo jen jeden soubor na řádek. GNU ls to dělá defaultně, když je na výstupu pípa, ale nespoléhal bych na to.Jinak netuším proč dáváš do ls -1
Protože v názvu souboru může být mezera a pak se to ti rozbije. Teda ono se to rozbije i teď, ale v míň případech. mkdir $'paplon\nvankus'a k čemu je dobrý OLDIFS=IFS IFS='' a IFS=OLDIFS
IFS a -1 zajistím, že se zpracují korektně i mezery v názvech.IFS=''IFS='
'find /home/virt/ -type f
#!/bin/sh
ROOTDIR="$1"
for d in $(ls -1 "$ROOTDIR")
do
for f in $(ls -1 "$ROOTDIR/$d")
do
echo "$ROOTDIR/$d/$f"
done
done
Nejsou na tom adresáři nějak divně nastavená práva?
for doporučuji
ls -1 /home/virt | while read DIR; do
…
done
Funguje to lépe než šachování s IFS
Ale jinak je na tohle opravdu lepší find
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.