我正在尝试编写一个脚本,该脚本将转到特定目录、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
目录。将命令的(空)输出通过管道传送cd
到ls
,它不采用标准输入。将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