«Найти» распечатать только имена файлов, а не полные пути - PullRequest
23 голосов
/ 09 февраля 2012

Я использую команду find в сценарии ksh и пытаюсь получить только имена файлов, а не полный путь.Например, я хочу, чтобы он возвращал text.exe, а не //severname/dir1/dir2/text.exe.

Как мне получить это?Чтобы уточнить, я знаю каталог, в котором находятся файлы, я просто беру те, которые созданы до определенной даты, поэтому путь не имеет значения.

Ответы [ 4 ]

65 голосов
/ 09 февраля 2012

Если вы используете GNU find, то

find path -printf "%f\n"

просто напечатает имя файла и исключит путь.

16 голосов
/ 09 февраля 2012
find ... -exec basename {} \; 

тоже поможет ... но, как спрашивает @Kent, зачем вам это?

9 голосов
/ 09 февраля 2012

Вы можете сделать это с:

find ..... |sed 's#.*/##'

однако имеет ли это смысл? если есть два файла с одинаковым именем файла, но расположенных в разных каталогах, как вы можете их различить?

, например

you are in /foo

/foo/a.txt
/foo/bar/a.txt

EDIT

отредактируйте ответ, чтобы получить лучшее форматирование текста.

Как вы описали в комментарии, так что вы хотите

  1. найти несколько файлов,
  2. скопировать их в каталог,
  3. gzip их в архив скажем a.gz
  4. удалять скопированные файлы, только если шаг 2 был успешным

Это можно сделать одним выстрелом:

find ...|xargs tar -czf /path/to/your/target/a.gz 

это найдет файлы, создайте tar (a.gz) для вашей целевой директории.

3 голосов
/ 14 декабря 2016

Вот еще один ответ.

find | awk -F/ '{print $NF}'    
...