这是我第一次使用 Linux shell 脚本,它看起来确实很强大,但我仍然有点困惑。
我想循环遍历目录中具有特定扩展名的所有文件递归地(所有子目录、子子目录和...)并通过在它们上运行可执行文件在原始文件的确切位置生成一个具有相同名称但扩展名不同的新文件。
以下是它的伪代码:
files = list of all files (full path not just names) with extension .ext recursively
for file in files
executable -option1 -option2 fullpath/file.ext1 > fullpath/file.ext2
find . -name '*.ext1' -type f -exec sh -c \
'executable -option1 -option2 ${0} > ${0%.ext1}.ext2' {} \;
find
是递归遍历文件树的标准工具。第一个参数(在本例中为“.”,表示当前工作目录)指定开始下降的树的基础。这-name
参数将搜索范围限制为与给定文件名匹配的文件。这-type f
进一步将搜索限制为常规文件(而不是目录或其他实体)。这-exec
选项指示 find 在它找到的每个符合先前规范的文件(名称以“.ext1”结尾的常规文件)上执行指定的命令,我们使用sh
执行命令而不是直接调用可执行文件有两个原因:很容易操作文件名,并且因为它不是严格可移植的,甚至尝试使用find
:必须完全按照{}
.
The ${0%.ext1}
是采用文件名(值$0
是文件名,因为我们将它作为第一个参数传递给sh
via {}
在 find 中)并去掉尾随的“.ext1”。我们将“.ext2”附加到结果字符串中以获得所需的输出文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)