Найти Найти только имена файлов, а не полные пути
Я использую команду find в ksh script, и я пытаюсь получить только имена файлов, а не полный путь. Как и в, я хочу, чтобы он возвращал text.exe, а не //severname/dir 1/dir2/text.exe.
Как мне это получить? Чтобы уточнить, я знаю каталог, в котором находятся файлы, я просто хватаю созданные созданные befoee дату ceetain, поэтому путь не имеет значения.
Ответы
Ответ 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, который я почему-то пропустил.