Ви можете зробити це безпосередньо find
; не потрібно залучати grep
або xargs
.
У структурі каталогів на зразок:
$ ls *
a_sensors_directory:
my_file.java my_non_java_file.txt
a_sensors_directory.test:
my_file.java my_non_java_file.txt
something_else:
my_file.java my_non_java_file.txt
Ця GNU find
команда вибере файли, що закінчуються в .java
каталогах поточного робочого каталогу, які містять слово sensors
, але не закінчується .test
(якщо я правильно інтерпретував ваше питання):
$ find -type f -ipath './*sensors*' -not -ipath './*.test/*' -iname '*.java'
./a_sensors_directory/my_file.java
man find
слід чітко пояснити комутатори і, можливо, краще, ніж я б.
Трубопровід є потужним, але базові інструменти самі справляються з багатьма сценаріями більш просто. Це дозволяє уникнути непотрібних процесових вил і утримує тонкі помилки до мінімуму.