Shell 幸灾乐祸地写一个sh脚本

Shell 幸灾乐祸地写一个sh脚本,shell,zsh,Shell,Zsh,这是一件愚蠢的事吗 将ls-1的输出管道化到文件 编辑文件,使每一行用引号字符括起来 并在每行的前面添加一个命令 使文件可执行 将其作为脚本运行 我这样问是因为ls-1中的文件有特殊字符,如括号、反引号等。我的编辑器宏用双引号围绕每个文件名,但这还不够 有没有更公正的方法?我是否应该在脚本本身中幸灾乐祸?我喜欢使用编辑步骤捕捉错误,但我可能只是很固执 (上下文:我有数千个MP3文件,希望在每个文件上运行一个程序以获得其节奏。) 这里最明智的做法是什么?只需在命令行中执行此操作即可 用于*中的

这是一件愚蠢的事吗

  • 将ls-1的输出管道化到文件
  • 编辑文件,使每一行用引号字符括起来
  • 并在每行的前面添加一个命令
  • 使文件可执行
  • 将其作为脚本运行
我这样问是因为ls-1中的文件有特殊字符,如括号、反引号等。我的编辑器宏用双引号围绕每个文件名,但这还不够

有没有更公正的方法?我是否应该在脚本本身中幸灾乐祸?我喜欢使用编辑步骤捕捉错误,但我可能只是很固执

(上下文:我有数千个MP3文件,希望在每个文件上运行一个程序以获得其节奏。)


这里最明智的做法是什么?

只需在命令行中执行此操作即可

用于*中的文件;执行mycommand“$file”;完成
用您想要运行的任何命令替换
mycommand

更多信息:

我的回答肯定是,“是的。”


文件名可以包含特殊字符,如果存在这些字符,即使是最聪明的文本解析算法也可能会误入歧途。这里没有从ls获取要处理的文件列表,而是有几个不需要解析的选项(如上面的注释和答案所示)。因此,像我的问题中所描述的那样将ls输出管道化到一个文件是愚蠢的

这很好,每个人都使用一些脚本(快速和肮脏的方式)来实现自动化,而且大多数时候它只使用您。我认为只有一行命令就足够了-
find~/Music/-iname*.mp3-typef-execdu-h{}用您的命令替换
du-h
。我强烈建议在进一步移动之前阅读有关
find
&
xargs
命令的文档/教程。如果要执行多个命令,请使用此命令
用于~/music/*.mp3中的音乐;做du-h“$音乐”;完成
这只是一个
循环的
你应该阅读Shawn linked的维基页面,这让我相信:“是的,Steve确实想做一件蠢事。”因为我不能确定ls会输出一些可以安全/可靠解析的东西,我不应该依赖ls来创建文件列表。你说“是”是什么问题?而且,这不是一个有用的、可操作的答案。这不能解决OP的问题。是的,我想做一件蠢事!作为OP,我碰巧知道我在追求什么,这是一种可靠的方法,可以获得符合某种模式的文件列表。我不明白“ls”会给我一些东西,我可以解析到这个列表中。