Рекурсивный список файлов всех файлов, список, содержащий путь + имя, тип, размер, данные создания, дату модификации

Посмотрел вокруг на stackru, гуглил... но ничего не соответствует моему требованию...:-) Что мне нужно / нужно, это плоский текстовый файл, содержащий информацию о файлах в определенном каталоге и подкаталогах. Есть способы сделать это с помощью сторонних программ и из терминала / Unix. Оба пути были бы хороши для меня. НО... мне нужна вся следующая информация о файле:

Путь и имя файла Тип (мы говорим здесь о macintosh, так что он может появиться из ветки ресурсов, очень старых файлов, начиная с середины 90-х!)

Размер файла

Дата создания

Дата модификации (это не обязательно иметь, просто хорошо иметь).

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

Заранее спасибо:-)

РЕДАКТИРОВАТЬ: формат вывода не имеет большого значения, может быть разделен табуляцией или точкой с запятой или что-то еще, если это текстовый файл - я всегда могу изменить его после. Важно то, что информация там...:-)

РЕЗУЛЬТАТ - что я в конечном итоге использовал (спасибо за помощь):-)

#!/bin/bash

find . -type f -name '*' -print0 | while IFS= read -r -d '' file
do
    name=$(basename "$file")
    path=$(dirname "$file")
    # full_path=$(readlink -f "$file") # This only works on Linux
    full_path=$(echo "$PWD/${file#./}")
    extension=${name##*.}
    size_human_readable=$(ls -lh "$file" | awk -F' ' '{print $5}')
    size_in_bytes=$(stat -f "%z" "$file")
    creation_date=$(stat -f "%SB" "$file")
    last_access=$(stat -f "%Sa" "$file")
    last_modification=$(stat -f "%Sm" "$file")
    last_change=$(stat -f "%Sc" "$file")
    creator=$(mdls -name kMDItemFSCreatorCode "$file")


    printf "\"%q\";" "$name"
    printf "\"%q\";" "$full_path"
    printf "%s" "\"$extension\";"
    printf "\"$size_human_readable\";"
    printf "\"$size_in_bytes\";"
    printf "\"$last_modification\";"
    printf "%s" "\"$creator\""
    printf "\n"
done

1 ответ

Решение

Может быть, что-то вроде этого:

#!/bin/bash

find . -type f -name '*' -print0 | while IFS= read -r -d '' file
do
    name=$(basename "$file")
    path=$(dirname "$file")
    # full_path=$(readlink -f "$file") # This only works on Linux
    full_path=$(echo "$PWD/${file#./}")
    extension=${name##*.}
    size_human_readable=$(ls -lh "$file" | awk -F' ' '{print $5}')
    size_in_bytes=$(stat -f "%z" "$file")
    creation_date=$(stat -f "%SB" "$file")
    last_access=$(stat -f "%Sa" "$file")
    last_modification=$(stat -f "%Sm" "$file")
    last_change=$(stat -f "%Sc" "$file")

    printf "[$file]:\n"
    printf "\tfile name:\t\t$name\n"
    printf "\tfile path:\t\t$path\n"
    printf "\tfull file path:\t\t$full_path\n"
    printf "\tfile extension:\t\t$extension\n"
    printf "\tfile size:\t\t$size_human_readable\n"
    printf "\tfile size in bytes:\t$size_in_bytes\n"
    printf "\tfile creation date:\t$creation_date\n"
    printf "\tlast file access:\t$last_access\n"
    printf "\tlast file modification:\t$last_modification\n"
    printf "\tlast file change:\t$last_change\n"
    printf "\n"
done

Конечно, вы можете изменить вывод! Скопируйте этот скрипт в файл (например, recursive_file_info.sh). Затем сделайте его исполняемым с chmod +x recursive_file_info.sh, Если вы хотите вывод в текстовом файле, вы можете перенаправить его с ./recursive_file_info.sh > files.txt,

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