我希望按字母顺序反向列出几个文件夹中的文件,然后将这些数据汇总到一个文件中 ( 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 信息的结尾后插入下一个文件
这有用吗?还是说我这是在对天发牢骚?
答案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$' ls_r_out.txt
file1
file1
好吧,这没什么帮助,因为它没有告诉我在哪里文件是。我将尝试使用相同的过程find
。现在,find
不支持排序,所以我必须通过管道传输sort
:
$ find dir1 dir2 | sort -r > find_reverse_out.txt
$ grep 'file1$' find_reverse_out.txt
dir2/file1
dir1/file1
瞧瞧。请注意,如果文件名包含任何特殊字符(如换行符),情况会变得更加复杂。