Snažím se získat soubor aktuálního data pomocí následujícího příkazu v HP-UX Unix:
$ ls -lrt ABC.LOG* |grep "`date +"%b %d"`"
Ale dává mi to chybu:
ksh: : cannot execute
grep: can't open %d
Nějaké návrhy?
Přijatá odpověď:
Chyba pramení z citace argumentů grep
a skutečnost, že backtickům se vnořování příliš nedaří:
grep "`date +"%b %d"`"
To je lepší napsat jako
grep "`date +'%b %d'`"
… nebo ještě lépe,
grep "$(date +'%b %d')"
Ve skutečnosti s $(...)
místo zpětných zaškrtnutí byste měli být schopni ponechat vnitřní dvojité uvozovky:
grep "$(date +"%b %d")"
Alternativa k grepování výstupu ls
by bylo udělat
find . -type f -name "ABC.LOG*" -ctime -1
Tím by byly nalezeny všechny běžné soubory (-type f
) v aktuálním adresáři, jehož názvy odpovídají danému vzoru a jehož ctime je méně než 24 hodin od aktuálního času . Ctime souboru je čas, kdy byla provedena poslední úprava dat nebo metadat souboru.
To však není přesně ekvivalentní tomu, čeho se snažíte dosáhnout. To se také vrací do podadresářů.