Бірнеше мәрте сәйкестендіру үшін «табу» функциясын қолдану

Possible Duplicate:
Unix “find” command usage

Бұл орнату нұсқаулығы үшін. Foo.sh сценарийі «ДИРЕКТОРДЫ» дәлел ретінде қабылдайды. Айталық, бар/TEST/TEST_1A/TEST_2A/TEST_3 және басқа dir/TEST/TEST_1B/TEST_2B/TEST_3.

Сценарий: foo.sh қысқаша.

DIR=`find $HOME -type d -name $1 | head 1'
if [ DIR is set to a directory ]
then
rm -rf $DIR

Пайдалану: foo.sh TEST_3

Енді сценарийден тек/TEST/TEST_1A/TEST_2A/TEST_3 жойылуы мүмкін./TEST/TEST_1B/TEST_2B/TEST_3 алып тастау үшін, каталогты қақтығысты шешу үшін алып тастауды баптау үшін, пәрмен жолында reg exp сөзін пайдалануым керек.

Жоғарыда көрсетілген сценарийдің табу бөлігін төмендегідей өзгертіңіз

DIR='find $HOME -type d -regexp $1 | head 1

NEW пайдалану: foo.sh TEST_2B/TEST_3

But "find" command FAILS to get the DIR set to /TEST/TEST_1B/TEST_2B/TEST_3 and instead returns empty & as a result DIR is empty and I can never ever remove /TEST/TEST_1B/TEST_2B/TEST_3

Сценарийді қалай өзгертуге болады, сонда іздеу табулятордың атауы, сондай-ақ каталогтың жолында да NO мәселелерінде әрекет етуі мүмкін. Infact, кейбір пайдаланушылар ішінара каталог жолын «foo.sh» дәлел ретінде бере алады. Мен «foo.sh» -тің осындай жағдайларда да жұмыс істейтінін күтемін

0
Сізге ` және ' символдарын еркін ауыстыруға болады. Бұл тек сізде орналастырылған ба? Немесе сценарийлер ' таңбаларының орнына ' қолдануға тырысады?
қосылды автор sarnold, көзі
.. head (1) командасының іс жүзінде істейтінін білесіз бе?
қосылды автор sarnold, көзі
сіз «NEW пайдалану бөлімінде» сияқты subdir/жолды көрсете алмайсыз және оны кез-келген нәрсеге сәйкес күте аласыз. көрсетілген каталогтар құрылымындағы файл жазбаларын іздеңіз (файл нақты файл немесе бағыттаушы болса да) Сіз оны бір уақытта 2 деңгейде іздеуді сұрайсыз және сіз де емес TEST_3 dirs екеуін де жойғыңыз келе ме? ЖӘНЕ сіз өшіргіңіз келген директің тізімде бірінші болып әрқашан болатынын білесіз бе? сәттілік.
қосылды автор shellter, көзі
cm'on @Mike, бірінші сұрағыңызды қалай өңдей алатындығыңызды және бірден бірнеше рет жарияламаңыз. Қандай күш жұмсау керек. Іске сәт.
қосылды автор shellter, көзі

1 жауаптар

Егер мен мұны істеп жүрсем, мен оны жай ғана тізбектей едім:

find $HOME -type d -name $1 | grep '\bTEST_.*?A\b' | xargs rm -rf

Бұл барлық каталогтарды «TEST_A» деген жолда болған жағдайда ғана жояды.

0
қосылды