我正在编写一个简单的程序来删除所有获取的文件。文件可以包含空格,所以我添加了引号,如下所示
find -name "*.scala" | xargs -d "\n" -I {} rm \"{}\"
Run Code Online (Sandbox Code Playgroud)
以上失败并出现错误:无法删除,没有这样的文件或目录。但是如果我列出相同的文件,它们就在那里。此外,如果我在下面执行并使用 bash 执行它;有用
find -name "*.scala" | xargs -d "\n" -I {} echo rm \"{}\" | bash
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么第一种情况不起作用吗?
我是 Linux、shell 脚本的新手,我正在尝试学习基础知识。我目前在重定向章节,在这里文档正在被解释。我无法真正理解下面的代码如何与cat
命令结合使用。如果有人可以告诉我吗?
cat << EOF
line1
line2
line3
EOF
Run Code Online (Sandbox Code Playgroud)
我非常了解<< EOF
工作原理。关键字表示输入的结束。我的问题是;cat
将文件名作为输入流;以便它可以在输出流上打印其内容。以上如何在内部工作?我们没有在任何地方指定文件名。shell 是否在内部创建了一些临时文件并将其提供给cat
?我希望我的问题很清楚。
我需要了解为什么 sed 能够为 1) 而不是 2) 工作。请不要向我发布任何替代解决方案。我已经在这个论坛上找到了它们。我只需要了解 sed 关于点 1) 和 2) 的行为。
1) sed -i s/\\r//g file.txt
在检查 od -c file.txt 时,sed 已成功删除 \r
2) sed -i s/\\n//g file.txt
在检查 od -c file.txt 时,sed 尚未删除 \n
我的问题是要了解为什么它不适用于第 2 点。请不要发布任何替代解决方案。希望了解内部结构就是这样!