![使用 ls > filelist 并将文件列表内容更改为文件列表](https://linux22.com/image/85196/%E4%BD%BF%E7%94%A8%20ls%20%3E%20filelist%20%E5%B9%B6%E5%B0%86%E6%96%87%E4%BB%B6%E5%88%97%E8%A1%A8%E5%86%85%E5%AE%B9%E6%9B%B4%E6%94%B9%E4%B8%BA%E6%96%87%E4%BB%B6%E5%88%97%E8%A1%A8.png)
我需要使用ls > filelist
and ,但是当使用时它会显示with"cat filelist"
中的所有内容作为其中的名称之一,但我需要更改它。我不确定如何仅对文件列表执行此操作(如果有意义的话)。filelist
filelist
"* * * File List * * *"
filelist
答案1
ls > /tmp/filelist
echo "* * * File List * * *"
cat /tmp/filelist
假设您没有列出/tmp
.如果是这种情况,请更改/tmp
为/var/tmp
答案2
你可以做:
ls | grep -vx filelist > filelist
该-v
选项使其从输出中排除匹配行,并-x
使其匹配整行(因此不会跳过otherfilelist
)。
答案3
Unix 命令非常简洁,并且不会用页眉/页脚或不相关的细节来装饰它们的输出,正是为了使它们在随机管道中的使用更容易。添加这样的内容非常简单:
(echo '* * * This is a header * * *'; ls ; echo --* footer *--) > filelist
答案4
只是为了更深入的理解:您可以轻松地将整个命令分为三部分:
回声”文件列表"; echo 在 STDIN(标准输入)上打印输出(如果您没有在其他地方通过管道输出)
LS | grep -vx 文件列表;列出当前目录的内容并将输出通过管道传输到 grep。通常,在我们的例子中,“grep”只会打印包含给定关键字(“filelist”)的行。使用选项 -v 我们正在查找不包含关键字的行。正如 Barmar 所提到的,它还会排除包含“filelist”的文件,例如“myfilelist”、“filelist2”等,因此建议使用 -x 。
filelist 将输出重定向到文件“filelist”。由于 (1) 和 (2) 位于括号中并以分号分隔,因此两个命令的输出(将在 STDIN 上打印出来)将被重定向到此文件。