Я хочу перечислить файлы нескольких папок в обратном алфавитном порядке и затем агрегате что данные в единственный файл (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 информация
Это работало бы? Или я лаю в луне здесь?
Вы лаете на луну. Просто используйте перенаправитель добавления >>
вместо перенаправителя записи >
:
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
Вуаля. Обратите внимание, что это становится более сложным, если имена файлов содержат какие-либо специальные символы, такие как перевод строки.