Как я могу рекурсивно распечатать список файлов с именами файлов короче 25 символов, используя одну строку? - PullRequest
0 голосов
/ 19 февраля 2011

Мне нужна однострочная команда для следующего требования.

Поиск всех файлов из корневого каталога и печать только тех имен файлов, длина имени файла которых меньше 25.

Полагаю, мы можем сделать это с помощью команды find, как показано ниже:

find / -type f |xargs basename .... Я не уверен насчет команды furthur.

Ответы [ 4 ]

2 голосов
/ 19 февраля 2011

Мой GNU find поддерживает это, не зная, является ли это частью стандартного поиска.

find / -type f -regextype posix-extended -regex '.*/.{1,24}$'

В качестве альтернативы используйте find |grep.

find / -type f | egrep '.*/.{1,24}$'
2 голосов
/ 19 февраля 2011
find / -type f|egrep "/[^/]{0,24}$"

В качестве альтернативы, если вы хотите отобразить только имя файла без пути:

find / -type f| egrep -o "/[^/]{0,24}$" | cut -c 2-
1 голос
/ 19 февраля 2011

Использование 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}'
0 голосов
/ 19 февраля 2011

После быстрого ознакомления с некоторыми руководствами я обнаружил, что awk более удобен и понятен. Пожалуйста, ознакомьтесь с предложенным ниже решением.

find / -type f|awk -F'/' '{print $NF}'| awk 'length($0) < 25'

возможно, есть некоторые синтаксические ошибки. Пожалуйста, исправьте меня, если я ошибаюсь.

...