Как я могу объединить списки файлов с помощью sed?

Я хочу перечислить файлы нескольких папок в обратном алфавитном порядке и затем агрегате что данные в единственный файл (AllDirectoriesFileInfo.txt). Я уже выяснил сортировку; теперь это просто сопоставляет информацию, которая озадачивает меня. Вот то, что я имею до сих пор:

ls -r /home/tony/Desktop/jpgfolder > AllDirectoriesFileInfo.txt
ls -r /home/tony/Desktop/giffolder > AllDirectoriesFileInfo.txt
ls -r /home/tony/Desktop/docxfolder > AllDirectoriesFileInfo.txt
ls -r /home/tony/Desktop/dregsfolder > AllDirectoriesFileInfo.txt

Однако после контроля AllDirectoriesFileInfo.txt, только информация от dregsfolder присутствует, ведя меня, чтобы прийти к заключению, что предыдущие данные были перезаписаны с каждой командой.

Так, я знаю это sed может добавить/вставить текст.

Первоначально я склонялся к использованию a;

Синтаксис так же прост, просто определяйте строку, после которой новая строка должна быть вставлена при помощи ее соответствующего числа или шаблона.

Однако для меня, указывая номер строки проблематично. Скажите, что я указываю строку 50, будет крупная пустыня пробела? Или скажите, что больший файл используется, затем информация становится искаженной?

Я знаю это с i команда (вводит) пользователя, может указать точку, в которой вставляется новый текст.

Мои взгляды и псевдокод следующие:

All information of folder 1 stored here
**END of folder 1 info**
All information of folder 2 stored here

И затем оттуда, используйте SED для вставки следующего файла после КОНЦА папки 1 информация

Это работало бы? Или я лаю в луне здесь?

0
задан 10 November 2017 в 14:52

1 ответ

Вы лаете на луну. Просто используйте перенаправитель добавления >> вместо перенаправителя записи >:

touch AllDirectoriesFileInfo.txt
ls -r /home/tony/Desktop/jpgfolder >> AllDirectoriesFileInfo.txt
ls -r /home/tony/Desktop/giffolder >> AllDirectoriesFileInfo.txt
ls -r /home/tony/Desktop/docxfolder >> AllDirectoriesFileInfo.txt
ls -r /home/tony/Desktop/dregsfolder >> AllDirectoriesFileInfo.txt

Или забудьте о добавлении и просто дайте ls несколько аргументов:

ls -r /home/tony/Desktop/jpgfolder /home/tony/Desktop/giffolder /home/tony/Desktop/docxfolder /home/tony/Desktop/dregsfolder >> AllDirectoriesFileInfo.txt

Упрощенный :

ls -r ~tony/Desktop/{jpgfolder,giffolder,docxfolder,dregsfolder} >> AllDirectoriesFileInfo.txt

Еще короче, если предположить, что tony - ваше имя пользователя:

ls -r ~/Desktop/{jpg,gif,docx,dregs}folder >> AllDirectoriesFileInfo.txt

Хотя, если вы собираетесь выполнять какую-либо обработку данных в файл, вы захотите использовать find вместо ls, так как в общем случае ls дает вывод для чтения человеком, а find дает вывод для чтения компьютером. В частности, в этом случае find перечисляет файл и его путь вместе.

Вот краткий пример:

$ mkdir dir1 dir2
$ touch {dir1,dir2}/file1
$ ls -r dir1 dir2 > ls_r_out.txt

Теперь скажите, что я хочу найти «file1»:

$ grep 'file1 

Хорошо, это не очень полезно, потому что это не говорит me где файлы. Я попробую тот же процесс с find. Теперь find не поддерживает сортировку, поэтому мне придется пройти через sort:

$ find dir1 dir2 | sort -r > find_reverse_out.txt
$ grep 'file1 

Вуаля. Обратите внимание, что это становится более сложным, если имена файлов содержат какие-либо специальные символы, такие как перевод строки.

find_reverse_out.txt dir2/file1 dir1/file1

Вуаля. Обратите внимание, что это становится более сложным, если имена файлов содержат какие-либо специальные символы, такие как перевод строки.

ls_r_out.txt file1 file1

Хорошо, это не очень полезно, потому что это не говорит me где файлы. Я попробую тот же процесс с find. Теперь find не поддерживает сортировку, поэтому мне придется пройти через sort:

$ find dir1 dir2 | sort -r > find_reverse_out.txt
$ grep 'file1 

Вуаля. Обратите внимание, что это становится более сложным, если имена файлов содержат какие-либо специальные символы, такие как перевод строки.

find_reverse_out.txt dir2/file1 dir1/file1

Вуаля. Обратите внимание, что это становится более сложным, если имена файлов содержат какие-либо специальные символы, такие как перевод строки.

3
ответ дан 1 November 2019 в 06:03

Другие вопросы по тегам:

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