Как найти каталоги с именем определенной длины

Как я могу найти каталоги с именем определенной длины? Например, у меня есть несколько каталогов, длина имени которых равна 33 символам ('a92e8cc611fdebcca3cf2fc8dc02c918', 'c442fb3f46d6c8bd17d27245290a9512' и т. Д.). Есть ли find утилита принимает условие в виде 'wc -c'? Или, может быть, некоторые другие утилиты должны быть переданы вместе?

4 ответа

Решение

Несколько способов найти с помощью GNU

$ find . -type d -name "?????????????????????????????????"

$ find /path -type d -printf "%f\n" | awk 'length==33'

У вас нет тега Java, но если бы он был, вы бы написали FileFilter, чтобы инкапсулировать любые критерии, которые вы имеете в виду, и передать его методу java.io.File.list(). Если вы хотите пройти по всему дереву структуры каталогов, вам придется использовать его, но это вполне выполнимо.

Извините, это просто не *nix-скриптинг.

В Apache Commons IO JAR есть несколько полезных утилит для работы с файлами и каталогами, которые могут упростить эту задачу.

Конечно:

find dir -name '?????????????????????????????????'

(это 33 раз ?).

      find . -type d -exec bash -c 'x=`basename {}`; [[ ${#x} == 33 ]] &&  echo $x ' \;

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

Чтобы уточнить: ${#x}-> находит длину строки и basename-> находит имя конечного каталога

Другие вопросы по тегам