Как я связываю все файлы в данном каталоге в порядке даты, где я хочу новейший файл на вершине?

Поскольку я пишу это, я обнаруживаю ifind-mode, который выглядит точечным на.

(setq workspace-dir "/path/to/dir1 /path/to/dir2")
(require 'ifind-mode)
;; maybe change `ifind-command' as well

Затем введите M-x ifind-mode найти файл в указанных каталогах (и подкаталоги по умолчанию), с изящным завершением.


То, что я обычно делаю, e **/bar от zsh (где e псевдоним для emacsclient). Но это разрушительно, если Вы уже находитесь в Emacs. Кроме того, если существует определенный файл, я часто редактирую, я оставляю его открытым (и я сохраняю свою сессию).

Из поля можно работать M-x find-dired и укажите аргументы find. Но это неуклюже, по крайней мере, для случая, когда у Вас есть единственное соответствие. ifind делает это менее неуклюжим.

ido имеет набор функций, которые могут быть полезными, особенно идо Использования для нахождения любого файла из проекта.

18
20.02.2016, 23:08
3 ответа

Для конкатенации файлов, Вы используете

cat file1 file2 file3 ...

Для получения списка заключенных в кавычки имен файлов, отсортированных по времени, новейшему первый, Вы используете

ls -t

Соединение всего этого,

cat $(ls -t) > outputfile

Вы могли бы хотеть дать некоторые аргументы ls (например, *.html).

Но если у Вас будут имена файлов с пробелами в них, то это не будет работать. My file.html как будет предполагаться, будет двумя именами файлов: My и file.html. Можно сделать ls заключите имена файлов в кавычки и затем используйте xargs, кто понимает заключение в кавычки, для передачи аргументов cat.

ls -tQ | xargs cat

Что касается Вашего второго вопроса, отфильтровывая части файлов не является трудным, но он зависит от того, что точно Вы хотите разделить. Каковы “избыточные заголовки”?

33
27.01.2020, 19:45
  • 1
    Это не работает над моей debian системой... Я должен использовать cat $(ls -t) > outputfile, иначе cat отклоняет заключенные в кавычки имена файлов –  Mike Pennington 16.06.2012, 12:50
  • 2
    Моя ошибка. Я всегда завоевываюсь популярность эти вещи. См. обновленный ответ. –  angus 16.06.2012, 14:19
  • 3
    О - избыточными заголовками я имею в виду вещи, которые обычно помещаются в некоторый header.php/footer.php файл, но которые сохраняются отдельно при сохранении к HTML (и может действительно увеличить размер файла когда Вы страницы PHP массовой загрузки). –  InquilineKea 16.06.2012, 18:03
  • 4
    О - избыточными заголовками я имею в виду вещи, которые обычно помещаются в некоторый header.php/footer.php файл, но которые сохраняются отдельно при сохранении к HTML (и может действительно увеличить размер файла когда Вы страницы PHP массовой загрузки). –  InquilineKea 16.06.2012, 18:03
  • 5
    cat $(ls -t) также уязвимо для расширения имени файла. Если существует имя файла с *, или ?, или выражение скобки (например. file-[old].html); и если имя файла, интерпретируемое как шаблон, соответствует другим именам файлов; подход произведет неправильный список. set -f обратился бы к этому дефициту. протест –  Barefoot IO 20.02.2016, 21:42
  • 6
    ls -Q может произвести вывод, который не подходит для xargs. Например, "foo" становится "\"foo\"", но xargs не понимает оставленные двойные кавычки в двойных заключенных в кавычки строках. –  Barefoot IO 20.02.2016, 22:04

Самый легкий способ перечислить файлы в порядке кроме лексикографического с zsh спецификаторами шарика. Без zsh можно использовать ls, но анализируя вывод ls чревато опасностями.

cat *(om)

Если Вы хотите разделить некоторые строки, используйте sed или awk или жемчуг. Например, для взятия <head> из первого файла и объединения <body> части из других файлов, предполагая, что <body> и </body> теги являются одними на строке в каждом файле:

{
  sed -e '/<\/body>/ q' *.html(om[2])
  sed -e '1,/<body>/ d' -e '/<\/body>/,$ d' *.html(om[3,-1])
  echo '</body>'
  echo '</html>'
} >concatenated.html

Объяснение:

  • Во-первых, concatenated.html создается. Это является поэтому самым молодым *.html файл (принимающий файл имеет дату в будущем.
  • Затем копия со второго самого молодого *.html файл, но завершенный в </body> строка.
  • Затем копия из других файлов, но пропуск все вниз к <body> строка и запускающийся с </body> строка.
  • Наконец произведите последние закрывающие тэги.
2
27.01.2020, 19:45

Решение, данное @angus, хорошее, но будут проблемы, если в папке есть каталоги.

cat $(ls -tpa | grep -v / )

1
27.01.2020, 19:45

Теги

Похожие вопросы