Я новичок, поэтому, пожалуйста, помогите:
Я держу журнал на своем iPhone с помощью Scratch, который выводит все заметки, которые я делаю, в отдельный .txt-файл, хранящийся в Dropbox.
] У меня это синхронизировано с моей системой Ubuntu 14.04, поэтому в моих файлах у меня есть папка со всеми текстовыми файлами, хранящимися здесь:
/ home / stuart / Dropbox / Scratch
[d4 ] Я хочу запустить команду, которая объединяет все эти файлы в один файл со следующими оговорками: Упорядочено по дате создания (самый ранний файл). Распечатайте дату файла на отдельной строке перед содержимым файла Включить пустую строку, за которой следует какая-то разделительная строка после каждого файлаТаким образом, выходной файл имеет записи, которые выглядят примерно так:
12-01-2014 11: 01 AM: кафе в Израиле. Знак на улице гласит: «Кофе» - 9 шекелей «Кофе, пожалуйста» - 8 шекелей «Доброе утро, мог бы я угостить кофе?» - 7 shekel - 25-01-2014 11:01 AM: Вы не можете превзойти свое эго - оле Гуннар солскьяр -И так далее. Я использовал другое приложение, которое делало это автоматически, но я не знаю, как его реплицировать.
Я просмотрел много файлов справки здесь, но я не нашел любой, который может помочь с выходом, который я имею в виду.
Любая помощь была высоко оценена!
Я попытался создать сценарий, предложенный ниже, и выполнил шаги. Однако я получаю этот ответ:
12-01-2014 11:01 AM: кафе в Израиле. Знак на улице гласит: «Кофе» - 9 шекелей «Кофе, пожалуйста» - 8 шекелей «Доброе утро, мог бы я угостить кофе?» - 7 shekel
stuart @ StudioClough: / home $ ./my_concat / home / stuart / Dropbox / Scratch> new_concatenated_file- 25-01-2014 11:01 утра: вы не можете превзойти свое эго - оле Гуннар solskjaer
stuart @ StudioClough: / home $ chmod + x $ HOME / my_concat
Вот решение bash. Он должен работать, если вы используете файловую систему ext4. Он использует дату создания файла, которую ext4 хранит в поле crtime.
Создайте этот скрипт где угодно. Скажем, my_concat в вашем каталоге $HOME (в вашем случае это /home/stuart):
#!/bin/bash
get_crtime() {
for target in "${@}"; do
inode=$(ls -di "${target}" | cut -d ' ' -f 1)
fs=$(df --output=source "${target}" | tail -1)
crtime=$(sudo debugfs -R 'stat <'"${inode}"'>' "${fs}" 2>/dev/null |
grep -oP 'crtime.*--\s*\K.*')
printf "%s\n" "${crtime}"
done
}
get_epoch_crtime(){
date --date "$(get_crtime $1)" +%s
}
get_epoch_mtime() {
stat -c %Y $1
}
# takes two date as input, returns earlier date
get_earlier_time(){
if [[ "$1" -lt "$2" ]]; then
echo $(date -d @$1 +%m/%d/%Y:%H:%M:%S)
else
echo $(date -d @$2 +%m/%d/%Y:%H:%M:%S)
fi
}
if [ $# != 1 ]; then
echo "Required only one argument - full path to folder"
echo "Usage example:"
echo "$0 /var/log/syslog/"
exit 1
fi
if [ -d "$1" ]; then
cd $1
for file in *
do
echo $(get_earlier_time $(get_epoch_crtime $file) $(get_epoch_mtime $file))
cat $file
echo -e "\n-------"
done
else
echo "The folder specified is not exists ($1). Please enter full path"
fi
Сделайте его исполняемым:
chmod +x $HOME/my_concat
Теперь перейдите к своему $HOME и запустить сценарий. Скрипт запросит у вас пароль, потому что скрипт использует sudo:
./my_concat /home/stuart/Dropbox/Scratch > new_concatenated_file
Теперь прочитайте new_concatenated_file с помощью какого-либо редактора:
gedit new_concatenated_file
Этот скрипт использует как дату создания, так и модификацию