Portál AbcLinuxu, 8. května 2025 00:53
#!/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 doneNejsou na tom adresáři nějak divně nastavená práva?
for
doporučuji
ls -1 /home/virt | while read DIR; do … doneFunguje to lépe než šachování s IFS
find
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.