用于将 ls 写入另一个目录中的文件的 Bash 脚本

用于将 ls 写入另一个目录中的文件的 Bash 脚本

我正在尝试编写一个脚本,该脚本将转到特定目录、ls该目录中的文件,然后将其写入另一个目录中的文件。这是我到目前为止想到的:

#!/bin/bash
getDisk1(){
   cd cwiczenia | ls >> cd /home/kai/listaplikow.txt
   return
}

getDisk2(){
   cd Pictures | ls >> cd /home/kai/listaplikow.txt
   return
}

getDisk1
getDisk2

我正在从文件夹运行脚本/home/kai/,但getDisk2没有将任何结果写入其目的地。谁能帮我解决这个问题吗?

答案1

你的命令是无稽之谈:

  cd Pictures | ls >> cd /home/kai/listaplikow.txt

“进入Pictures目录。将命令的(空)输出通过管道传送cdls,它不采用标准输入。将ls' 输出发送到名为 的文件cd。”

您可能想要的是这样的:

( cd Pictures; ls >> /home/kai/listaplikow.txt )

这是在括号中的原因是它在子 shell 中执行,并且不会(尝试)更改底层脚本的工作目录。

不管怎样,解析ls一般的输出都是一个坏主意。最好做这样的事情:

find Pictures/ -maxdepth 1 >> /home/kai/listaplikow.txt

如果您不喜欢查看文件所在的路径,最好使用find实际获取文件列表:

find Pictures/ -maxdepth 1 -print0 | xargs -0 -L1 basename >> /home/kai/listaplikow.txt

答案2

改变你的语法:

cd cwiczenia | ls >> cd /home/kai/listaplikow.txt

cd cwiczenia && ls >> /home/kai/listaplikow.txt

解释:

  • &&:执行该命令之前,请确保前一条命令cd成功。ls

相关内容