Lehet-e valahogy bash scripttel ellenőrizni, hogy egy könyvárban van-e *.txt fájl (a csúnya, "No such file or directory" üzenetet elkerülendő).
Ez működik, de csak konkrét fájlnevekre, viszont esetemben a fájlnév eléggé random lehet és sajnos space-t is tartalmaz:
if [ -f /mnt/valami.txt ];then
....
fi
Ez pedig "[: too many arguments" üzenetet, produkál:
if [ -f /mnt/*.txt ];then
....
fi
- 1313 megtekintés
Hozzászólások
man test
- A hozzászóláshoz be kell jelentkezni
Melyik sorára gondoltál?
- A hozzászóláshoz be kell jelentkezni
man bash
Pathname Expansion
After word splitting, unless the -f option has been set, bash scans
each word for the characters *, ?, and [. If one of these characters
appears, then the word is regarded as a pattern, and replaced with an
alphabetically sorted list of file names matching the pattern. If no
matching file names are found, and the shell option nullglob is not
enabled, the word is left unchanged. If the nullglob option is set,
and no matches are found, the word is removed. If the failglob shell
option is set, and no matches are found, an error message is printed
and the command is not executed. If the shell option nocaseglob is
enabled, the match is performed without regard to the case of alpha-
betic characters. When a pattern is used for pathname expansion, the
character ``.'' at the start of a name or immediately following a
slash must be matched explicitly, unless the shell option dotglob is
set. When matching a pathname, the slash character must always be
matched explicitly. In other cases, the ``.'' character is not
treated specially. See the description of shopt below under SHELL
BUILTIN COMMANDS for a description of the nocaseglob, nullglob, fail-
glob, and dotglob shell options.
- A hozzászóláshoz be kell jelentkezni
Izé.. megzavarodtam, melyik shelloptot kell beállítania?
- A hozzászóláshoz be kell jelentkezni
shopt -s nullglob
- A hozzászóláshoz be kell jelentkezni
fisher@ap:/data$ shopt -s nullglob
fisher@ap:/data$ if [ -f *.grt ] ; then echo ok ; else echo nemok ; fi
ok
fisher@ap:/data$ shopt -u nullglob
fisher@ap:/data$ if [ -f *.grt ] ; then echo ok ; else echo nemok ; fi
nemok
fisher@ap:/data$ ls *.grt
ls: *.grt nem érhető el: Nincs ilyen fájl vagy könyvtár
Vagy hogy kéne használni?
- A hozzászóláshoz be kell jelentkezni
~ $ mkdir z1
~ $ cd z1
~/z1 $ touch a.a a.b b.b
~/z1 $ for f in *.a; do echo "$f"; done
a.a
~/z1 $ for f in *.b; do echo "$f"; done
a.b
b.b
~/z1 $ for f in *.c; do echo "$f"; done
*.c
~/z1 $ shopt -s nullglob
~/z1 $ for f in *.a; do echo "$f"; done
a.a
~/z1 $ for f in *.b; do echo "$f"; done
a.b
b.b
~/z1 $ for f in *.c; do echo "$f"; done
~/z1 $
- A hozzászóláshoz be kell jelentkezni
find . -type f -name '*.txt' | while read "$files"; do
if [ -f "$files" ]; then
...
fi
done
Bár már a find is konkrétan csak file-okat fog kilistázni a -type f miatt.
A szóközök miatt pedig tedd "" közé a változót.
- A hozzászóláshoz be kell jelentkezni
kb
# if ls /tmp/*.txt > /dev/null 2>&1; then echo "van"; else echo "nincs"; fi
- A hozzászóláshoz be kell jelentkezni
fapados megoldas:
find /mnt/ -type f -name "*.txt" >/dev/null 2>&1
if [ $? ] ; then
echo "letezik"
else
echo "nem letezik"
fi
- A hozzászóláshoz be kell jelentkezni
?
hron@sunshine ~$ find . -maxdepth 1 -name '*.nincsilyen'
hron@sunshine ~$ echo $?
0
A te kodod helyesen:
x=$(find /mnt -type f -name '*.txt' 2>/dev/null | wc -l)
if [ "${x}" -gt 0 ]; then
echo "letezik"
else
echo "nincs ilyen"
fi
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
szerintem ez nem muxik. a find akkor is 0-val tér vissza ha nem talál fájl(oka)t.
legfeljebb:
# if [ -z "$(find /mnt -type f -name \*.txt)" ]; then echo "nincs"; else echo "van"; fi
vagy ilyesmi.
- A hozzászóláshoz be kell jelentkezni
Részemről úgy szoktam, hogy:
ls *.txt 2>&1 1>/dev/null && ValamiParancs
- A hozzászóláshoz be kell jelentkezni
Ha csak ugy nem.
- A hozzászóláshoz be kell jelentkezni
txtnum=`find /mnt -name *.txt -type f | wc -l`
if [ "$txtnum" -gt 0 ]; then
..
fi
- A hozzászóláshoz be kell jelentkezni
Konycsepp szokik a szemembe a peldak lattan. Eleg kellemetlen hogy az MS a powershellel meg ebben is elobbre jar.
- A hozzászóláshoz be kell jelentkezni
Van powershell linuxra, csak a fejlesztoje szeretkezik normalis forditasi supportot adni melle. Forditsd windowson, vagy hasznald az oaltala kiadott ki tudja milyen binarist. En azon a ponton fejeztem be ezt a tortenetet.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Én ezt próbálnám:
shopts -s nullglob
x=$(echo *txt)
[ -z "$x" ] && echo nincs
- A hozzászóláshoz be kell jelentkezni