2

Мне нужна команда поиска (или аналогичная), которая при указании на папку выводит список всех файлов, которые находятся внутри этой папки или любой из ее подпапок, но только если папка содержит один файл. Другими словами, я хочу перечислить содержимое папок, которые содержат только один файл.

Итак, с учетом следующих файлов

/Foldera/folderb
/Foldera/folderb/test1.txt
/Foldera/folderb/test2.txt
/Foldera/folderc
/Foldera/folderd/test3.txt
/Foldera/folderc/foldere

это вывело бы

/Foldera/folderd/test3.txt

2 ответа2

0

С Bash 3:

find . -type d -exec sh -c \
'[[ $(find "$0" -mindepth 1 | wc -l) -eq 1 ]] && [[ $(find "$0" -mindepth 1 -type d | wc -l) -eq 0 ]]  && echo "$0"' \
{} \;

С Bash 4:

shopt -s globstar
for dir in **/; do 
  [[ $(find "$dir" -mindepth 1 | wc -l) -eq 1 ]] && [[ $(find "$dir" -mindepth 1 -type d | wc -l) -eq 0 ]]  && echo "$dir"
done

По сути, итерируйте по каждому каталогу, а затем проверьте, содержит ли этот каталог ровно один дочерний элемент (файл или каталог), и проверьте, не является ли этот дочерний элемент каталогом. Если есть только один дочерний элемент, а это не каталог, echo его.

Имейте в виду: это не работает, если каталоги или файлы содержат новую строку в своем имени.

Это может быть проще сделать, если у вас есть утилиты GNU, такие как find с опцией -printf но в OS X по умолчанию ее нет.

-1

У меня нет Mac, чтобы проверить это, но я нашел много ответов, когда погуглил ваш вопрос.

find . -type 'f' -printf '%h\n' | sort | uniq -c

Это напечатает, сколько файлов находится в каждой папке, а затем с помощью grep или другого инструмента вы можете сузить его.

Я хотел бы проверить источник ниже, это для Windows, но у них есть много Perl-решений, которые могут работать так же хорошо.

Подобный вопрос: источник

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .