Мне нужна однострочная команда для следующего требования.
Поиск всех файлов из корневого каталога и печать только тех имен файлов, длина имени файла которых меньше 25.
Полагаю, мы можем сделать это с помощью команды find, как показано ниже:
find / -type f |xargs basename .... Я не уверен насчет команды furthur.
find / -type f |xargs basename ....
Мой GNU find поддерживает это, не зная, является ли это частью стандартного поиска.
find / -type f -regextype posix-extended -regex '.*/.{1,24}$'
В качестве альтернативы используйте find |grep.
find / -type f | egrep '.*/.{1,24}$'
find / -type f|egrep "/[^/]{0,24}$"
В качестве альтернативы, если вы хотите отобразить только имя файла без пути:
find / -type f| egrep -o "/[^/]{0,24}$" | cut -c 2-
Использование Bash 4 +
shopt -s globstar shopt -s nullglob for file in **/* do file=${file##*/} if (( ${#file} < 25 ));then echo "$file"; fi done
Рубин (1,9 +)
ruby -e 'Dir["**/*"].each {|x| puts x if File.basename(x).size < 25}'
После быстрого ознакомления с некоторыми руководствами я обнаружил, что awk более удобен и понятен. Пожалуйста, ознакомьтесь с предложенным ниже решением.
find / -type f|awk -F'/' '{print $NF}'| awk 'length($0) < 25'
возможно, есть некоторые синтаксические ошибки. Пожалуйста, исправьте меня, если я ошибаюсь.