Рекурсивный список файлов всех файлов, список, содержащий путь + имя, тип, размер, данные создания, дату модификации
Посмотрел вокруг на 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
,