Подтвердить что ты не робот

Найти Найти только имена файлов, а не полные пути

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

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

4b9b3361

Ответ 1

вы можете сделать это с помощью

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

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

например.

you are in /foo

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

ИЗМЕНИТЬ

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

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

  • найдите некоторые файлы,
  • скопируйте их в каталог,
  • gzip их в архив сказать a.gz
  • удалять скопированные файлы только в том случае, если шаг 2 прошел успешно

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

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

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

Ответ 2

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

find path -printf "%f\n"

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

Ответ 3

find ... -exec basename {} \; 

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

Ответ 4

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

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

Ответ 5

GNU find изначально поддерживает это, используя -printf, поэтому все, что вам нужно сделать, это

find ... -printf '%f\n'

Обновление: упс... об этом уже говорилось в ответе @glenn-jackman, который я почему-то пропустил.