6 ответов:
Если ваша находка не имеет опции-printf, вы также можете использовать basename:
find ./dir1 -type f -exec basename {} \;
Если вы используете GNU find
find . -type f -printf "%f\n"или вы можете использовать язык программирования, таких как Ruby(1.9+)
$ ruby -e 'Dir["**/*"].each{|x| puts File.basename(x)}'Если вы представляете себе Баш (по крайней мере 4) решение
shopt -s globstar for file in **; do echo ${file##*/}; done
использовать
-execdir, который автоматически закрывает текущий файл в{}, например:find . -type f -execdir echo '{}' ';'вы также можете использовать
$PWDвместо.(на некоторых системах он не будет производить дополнительную точку спереди).если у вас все еще есть дополнительная точка, в качестве альтернативы вы можете запустить:
find . -type f -execdir basename '{}' ';'
-execdir utility [argument ...] ;The
-execdirпервичный идентичен-execпервичный, за исключением этой утилиты будет выполняться из каталога, который закрывает текущий файл.при использовании
+вместо;, потом{}заменяется как можно большим количеством путей для каждого вызова утилиты. Другими словами, он будет печатать все имена файлов в одной строке.
если вы хотите выполнить какое-либо действие только с именем файла, используя
basenameможет быть жестким.например это:
find ~/clang+llvm-3.3/bin/ -type f -exec echo basename {} \;будет просто эхо basename
/my/found/path. Не то, что мы хотим, если мы хотим выполнить на имя файла.но вы можете тогда
xargsвыход. например, чтобы убить файлы в dir на основе имен в другом dir:cd dirIwantToRMin; find ~/clang+llvm-3.3/bin/ -type f -exec basename {} \; | xargs rm
Я нашел решение (на странице makandracards), которое дает только самое новое имя файла:
ls -1tr * | tail -1(спасибо идет к Арне решается)
я использовал его для
cp:cp $(ls -1tr * | tail -1) /tmp/
Comments