Поскольку я пишу это, я обнаруживаю 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
имеет набор функций, которые могут быть полезными, особенно идо Использования для нахождения любого файла из проекта.
Для конкатенации файлов, Вы используете
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
Что касается Вашего второго вопроса, отфильтровывая части файлов не является трудным, но он зависит от того, что точно Вы хотите разделить. Каковы “избыточные заголовки”?
Самый легкий способ перечислить файлы в порядке кроме лексикографического с 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>
строка.Решение, данное @angus, хорошее, но будут проблемы, если в папке есть каталоги.
cat $(ls -tpa | grep -v / )
cat $(ls -t) > outputfile
, иначеcat
отклоняет заключенные в кавычки имена файлов – Mike Pennington 16.06.2012, 12:50cat $(ls -t)
также уязвимо для расширения имени файла. Если существует имя файла с*
, или?
, или выражение скобки (например.file-[old].html
); и если имя файла, интерпретируемое как шаблон, соответствует другим именам файлов; подход произведет неправильный список.set -f
обратился бы к этому дефициту. протест – Barefoot IO 20.02.2016, 21:42ls -Q
может произвести вывод, который не подходит дляxargs
. Например,"foo"
становится"\"foo\""
, но xargs не понимает оставленные двойные кавычки в двойных заключенных в кавычки строках. – Barefoot IO 20.02.2016, 22:04