Назад | Перейти на главную страницу

Как я могу объединить ls и xargs для пропуска пути

У меня есть папка 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. Таким образом, исходная проблема решена, потому что нет необходимости удалять путь из имени файла.