mám find
príkaz, ktorý nájde súbory s názvom zodpovedajúcim viacerým vzorkám uvedeným proti -name
parameter
find -L . ( -name "SystemOut*.log" -o -name "*.out" -o -name "*.log" -o -name "javacore*.*" )
Toto vyhľadáva požadované súbory úspešne na príkazovom riadku. To, čo hľadám, je použiť tento príkaz v shellovom skripte a pripojiť sa k nemu tar
príkaz na vytvorenie tar z log súborov. Takže v skripte urobím nasledovné:
LIST="-name "SystemOut*.log" -o -name "*.out" -o -name "*.log" -o -name "javacore*.*" "
find -L . ( ${LIST} )
Toto netiskne súbory, ktoré hľadám.
Najskôr - prečo tento skript nefunguje ako príkaz? Akonáhle sa to stane, môžem to zviesť cpio
alebo podobne vytvoriť tar
v jednom zábere?
odpovede:
6 pre odpoveď č. 1Vyzerá ako find
sa nezhoduje *
v modeloch z nekótovaných premenných. Táto syntax funguje pre mňa (pomocou bash polí):
LIST=( -name *.tar.gz )
find . "${LIST[@]}"
Váš príklad by sa stal nasledovný:
LIST=( -name SystemOut*.log -o -name *.out -o -name *.log -o -name javacore*.* )
find -L . ( "${LIST[@]}" )
1 pre odpoveď č. 2
eval "find -L . ( ${LIST} )"
1 pre odpoveď č. 3
Môžete použiť eval a xargs,
eval "find -L . ( $LIST ) " | xargs tar cf 1.tar
1 pre odpoveď č. 4
Keď máte dlhý zoznam názvov súborov, ktoré používate, môžete skúsiť nasledovnú syntax:
# List of file patterns
Pat=( "SystemOut*.log"
"*.out"
"*.log"
"javacore*.*" )
# Loop through each file pattern and build a "find" string
find $startdir ( -name $(printf -- $""%s"" "${Pat[0]}") $(printf -- $"-o -name "%s" " "${Pat[@]:1}") )
Táto metóda konštruuje argument postupne pomocou prvkov zo zoznamu, ktorý má tendenciu lepšie fungovať (aspoň v mojich nedávnych skúsenostiach).
Môžete použiť nájsť "s -exec
možnosť preniesť výsledky do archivačného programu:
find -L . ( .. ) -exec tar -Af archive.tar {} ;
0 pre odpoveď č. 5
LIST="-name SystemOut*.log -o -name *.out -o -name *.log -o -name javacore*.*"
Zástupné znaky sú už citované a nie je potrebné ich znovu citovať
LIST="-name "SystemOut*.log""
vnútorné citácie sú zachované a find
dostane ich ako súčasť argumentu.