За допомогою пошуку знайдіть каталог


20

Я постійно використовую locate, щоб знайти файли, за якими я знаю ім'я, пошук дуже швидко, і мені це подобається. Нещодавно створені файли знаходять чудово, як правило, з нещодавно створеними файлами я знаю, де в основному вони створені, тому мені не доведеться шукати всю свою файлову систему.

Коли я забув розташування каталогу, але ні пошук, ні пошук не здаються ідеальними.

У програмі "Локація" завжди випливає занадто багато інформації, оскільки кожен файл у каталозі також є збігом для пошуку. Наприклад, якщо я шукав каталог з ім’ям журналу десь у моїй файловій системі, журнал пошуку файлів повертав би тонни і тонни результатів. Якщо я роблю те саме, що і при знаходженні, пошук / ім'я типу журналу d find займає кілька хвилин і випилює всілякі помилки дозволів кожного разу, коли він стикається з папкою, яку він не може прочитати.

Чи є кращий спосіб?

Відповідь: Тож я тримаюсь із грепом, поки не знайду щось інше:

locatedir () {
    for last; do true; done
    if [[ $last == *\/* ]]
    then
        locate $@ | grep "${last}\$"
    else
        locate $@ | grep "/${last}\$"
    fi
}

Відповіді:


12

Спосіб (я підозрюю, що може бути кращий спосіб) - використовувати grep, щоб повернути лише ті шляхи, які закінчуються у назві вашої папки:

locate foldername | grep /foldername$

28

Ви можете скористатися опцією --regex( -r) locate:

locate -r '/log$'

Так (+1). locateмає власну вбудовану функцію regex capablility: -rабо --regex... про повний спектр варіантів див .: пошук інформації
Peter.O

1
Я знав, що повинен бути кращий шлях!
misterben

Так коротко, і воно працює безперебійно. Великий внесок! Ще одна причина вчитися / опановувати регулярні вирази
loved.by.Jesus

У 'цьому випадку вам не потрібно два : locate -r /log$достатньо.
simlev

5

Ти намагався:

locate /home/insertusernamehere/*/filename?

або

locate file | grep -i '^/home/.*/examplesubdirectory'?

чи будь-яка варіація такого?


Ця відповідь показує, що grepце не потрібно, і як видно з першого запропонованого варіанту, також не є регулярні виразки.
Том

2

Ось

locatedir () {
    locate "$*" | while read line
    do 
    if [ -d "$line" ] ; then echo $line ; fi
    done
}

locatedir $*

1
Якщо ви можете пояснити, які зміни ви внесли, це буде корисним і для інших.
Рон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.