Я изо всех сил пытаюсь понять, почему я получаю разные выходные данные из одной и той же команды, запущенной для одного файла в терминале (Mac OS X 10.6.8), и для нескольких файлов. Поскольку я хочу выполнить команду в скрипте bash, я пытаюсь получить согласованные результаты при запуске одного файла за раз.
Команда, дающая мне проблему
ls -l "filename" | cut -f8 -d' '
Я пытаюсь выделить размер файла.
Кажется, что это работает для файлов без расширенных разрешений (например, первое поле "-rw-r - r--"), но для файлов с расширенными разрешениями (например, первое поле "-rwxrwxrwx @") мне нужно вырезать -f7 -d ''
Интересно, если я выбираю файл каждого типа и запускаю:
ls -l "filename1" "filename2" | cut -f8 -d' '
он возвращает размер файла для обоих файлов без проблем. Я не понимаю, почему это должно происходить ... но, конечно, в моем сценарии я делаю этот файл за раз.
Я попытался использовать sed для удаления двойных пробелов и двойных вкладок, и это действительно меняет номер поля, необходимого для определения размера файла, но, тем не менее, он дает результаты, которые зависят от того, являются ли они расширенными правами доступа к файлу.
Я включил цикл while из моего скрипта для справки, но его нелегко прочитать, потому что размер файла - это только одно из 4 полей, разделенных двоеточиями, которые я вставляю.
#!/bin/bash
# lots of other stuff here including specifying input (which is a list of filenames with complete paths) and output files ...
while IFS= read -r line
do
echo "$line":`exiftool -all= -o - "$line" | md5`:`md5 "$line" | cut -f2 -d'=' | sed -e 's/^[ \t]*//'`:`ls -l "$line" | cut -f8 -d' '` >> "$outputfile"
done < "$file"
Может ли кто-нибудь помочь пролить свет на это для меня?