Как найти каталоги с именем определенной длины
Как я могу найти каталоги с именем определенной длины? Например, у меня есть несколько каталогов, длина имени которых равна 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
-> находит имя конечного каталога