Существует ли $ mdls -recursive?

Может ли mdls команда будет использоваться рекурсивно в терминале MacOS? Есть ли альтернатива, которая даст мне список всех файлов вместе со всеми mdls Информация? ls имеет возможность получить мне немного, но не так много, как mdls,

Это следующий вопрос: в терминале macOS команды "ls | mdls" работают только для домашнего каталога.

1 ответ

Решение

Если вы используете globstar Опция оболочки (Bash 4.0 или новее1), вы можете сделать что-то вроде этого:

shopt -s globstar
mdls -name kMDItemFSName -name kMDItemDateAdded **/*

Вывод будет выглядеть примерно так

kMDItemDateAdded = 2018-07-10 15:33:04 +0000
kMDItemFSName    = "File1.txt"
kMDItemDateAdded = 2018-07-11 17:18:11 +0000
kMDItemFSName    = "File2.txt"

с недостатком, что информация о пути теряется.

Если у вас много-много файлов, в результате чего командная строка становится слишком длинной, вы можете вместо этого перебирать файлы:

for f in **/*; do
    printf '%s\t%s\n' "$f" "$(mdls -name kMDItemDateAdded "$f")"
done

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

File1.txt       kMDItemDateAdded = 2018-07-10 15:33:04 +0000
File2.txt       kMDItemDateAdded = 2018-07-11 17:18:11 +0000

или вы могли бы использовать find:

  • GNU find:

    find -printf '%p\t' -exec mdls -name kMDItemDateAdded {} \;
    
  • BSD find:

    find . -exec printf '%s\t' {} \; -exec mdls -name kMDItemDateAdded {} \;
    

1 Который в macOS сначала нужно установить, например, с помощью Homebrew.

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