У меня есть папка lib. В этой папке есть файлы. Я хочу получить все имена файлов, которые заканчиваются на .jar, и объединить их в строку, разделенную пробелами. Мне вообще не нужен путь.
Я пробовал это:
ls lib/*.jar | xargs
и выход
lib/file1.jar lib/file2.jar
Но я пытаюсь получить
file1.jar file2.jar
Как я могу это сделать?
Я тоже пробовал найти, но у меня та же проблема
find lib -name *.jar | xargs
И другой find lib -maxdepth 1 -name *.jar -printf '%f\n' | xargs
%f File's name with any leading directories removed (only
the last element).
Просто чтобы показать, что вы можете добиться того же разными способами: если вы используете bash, вы можете:
for i in lib/*.jar; do echo ${i#*/}; done|xargs
или
echo $(for i in lib/*.jar; do echo ${i#*/}; done)
Это сработало для меня, хотя, похоже, должен быть более простой (т.е. менее хакерский и более красивый) способ:
$ ls lib/*.jar | xargs -n 1 basename | xargs
basename из coreutils - это вариант.
find lib -maxdepth 1 -name *.jar -exec basename {} \; | xargs
Явно вырванный из Марк Вагнер, но без дополнительного вызова xargs.
find lib -maxdepth 1 -name *.jar -printf '%f '
Старый вопрос, но если вы собираетесь использовать find, было бы лучше просто использовать -exec, а не подключаться к xargs. Таким образом, исходная проблема решена, потому что нет необходимости удалять путь из имени файла.