Знайти всі файли з ім'ям файлу, що починається із вказаного рядка?


148

У мене є каталог, який містить приблизно 100000 файлів, і я хочу виконати деяку функцію для всіх файлів, починаючи з визначеного рядка, який може відповідати десяткам тисяч файлів.

я намагався

ls mystring*

але це повертається з помилкою bash "Занадто багато аргументів". Наступним моїм планом було використання

find ./mystring* -type f

але це те саме питання.

Код повинен виглядати приблизно так

for FILE in `find ./mystring* -type f`
do
    #Some function on the file
done

Замість forпетлі, ви повинні трубу findв while.
Призупинено до подальшого повідомлення.

Відповіді:


277

використання

find . -name 'mystring*'

10
і виконати якусь функцію "find. -name 'mystring *' -exec [команда]", наприклад, видалити "find. -name 'mystring *' -exec rm {} \;"
Ельдар

2
Де {} - заповнювач імені файлу :-) (так що ви можете сконструювати власні дії)
Серхіо Туленцев

1
Це, здається, повертає всі результати, що містять рядок? The
Brian Z

7
... або find . -iname 'mystring*'для нечутливого пошуку.
Френк Нокк

ОП посилається на єдиний каталог, тому вставляйте -maxdepth 1перед тим, -nameщоб обмежити пошук у поточній папці
jacanterbury

27
ls | grep "^abc"  

дасть вам усі файли, що починаються (що саме OP вимагає) з підрядкою abc.
Він працює лише в поточному каталозі, тоді як findпрацює рекурсивно в підпапки.

Щоб використовувати findлише файли, починаючи з рядка, спробуйте

знайти. -name 'abc' *


4

Якщо ви хочете обмежити свій пошук лише файлами, які слід розглянути для використання -type fв пошуку

спробуйте використовувати і -inameдля нечутливого до реєстру пошуків

Приклад:

find /path -iname 'yourstring*' -type f

Ви також можете виконати деякі операції з результатами без знаку труби або xargs

Приклад:

Шукайте файли та показуйте їх розмір у МБ

find /path -iname 'yourstring*' -type f -exec du -sm {} \;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.