Unix команда «найти» :отобразить тип папки/каталога

С busybox date (, поддерживающим -D-опцию ), вы можете выполнить:

$ busybox date -D '%d%m%Y' -d '20042019' +'%Y/%b/%d'
2019/Apr/20

Или, если вам нужны полные названия месяцев:

$ busybox date -D '%d%m%Y' -d '20042019' +'%Y/%B/%d'
2019/April/20

Обратите внимание, что название месяца меняется при изменении языка/страны.

0
26.04.2021, 03:15
2 ответа

Следующая команда аналогична find., но добавляет завершающую косую черту для файлов типа каталог:

find. ! -type d -print -o -exec printf '%s/\n' {} \;

Идея состоит в том, чтобы указать, что каталоги и по-прежнему получают допустимые существующие пути в выходных данных.

Примечания:

  • Команда переносима.

  • Если вместо .вы используете путь, оканчивающийся на /(, а каталог существует ), то при обработке пути вместо {}вместо {}будет подставлена ​​предоставленная строка find. По сути, вы получаете строку, заканчивающуюся на //. Это не проблема, если только вы не укажете корневой каталог /и получите точно//. Обходной путь — указать /.вместо /. Улучшение заключается в том, чтобы не добавлять косую черту, если она уже есть в конце :

    .
    find … \( ! -type d -o -path '*/' \) -print -o -exec printf '%s/\n' {} \;
    

    где означает один или несколько (или ноль, если ваш findможет принимать )начальные пути. Тогда можно смело указывать /.

0
28.04.2021, 22:50

Команда lsимеет стандартную опцию -F, которая добавляет /после каталогов, *после исполняемых файлов, @после символических ссылок и |после именованных каналов (и реализации могут добавлять к этому дополнительные символы; см. ваше lsруководство ).

Звонить ls -Fпо каждой найденной вещи:

find. -exec ls -1 -f -d -F {} +

Я добавил опцию-1("тире -один" )для получения результатов в одном столбце, -fдля отключения сортировки результатов (вы получите порядок, который find] находит пути в )и -dдля списка каталогов, а не их содержимого.

{} +будет заменен пакетами найденных путей, столько, сколько lsможет быть вызвано одновременно.

Пример запуска:

$ find. -exec ls -1 -f -d -F {} +
./
./.bash_profile
./.zshrc
./.bashrc
./.yashrc
./dir1/
./dir1/file-1
./dir1/subdir/
./dir1/subdir/file-2
./dir2/
./dir2/file-1
./dir2/subdir/
./dir2/subdir/file-2

Пути, не заканчивающиеся каким-либо конкретным символом, являются обычными файлами.

1
28.04.2021, 22:50

Теги

Похожие вопросы