linux - 在子目录中的文件上执行程序

标签 linux bash shell

我在一个目录中有以下文件结构。

  Directory
     /A/abc.xyz
     /B/abc.xyz
     /C/abc.xyz
     /D/abc.xyz
     /E/abc.xyz

我想在每个子目录中的 acb.xyz 上执行一个程序。将输出文件保存在不同的目录中,即 Directory/processed,在输出文件的名称中附加子目录的名称。 可以这样写吗?需要更正。

for i in `ls "Directory/"`
do
  program.pl $i/abc.xyz > processed/$i-abc.xyz
done

最佳答案

for dir in Directory/*; do
    program.pl "$dir/abc.xyz" > "processed/${dir##*/}-abc.xyz"
done

${dir##*/> 部分从 $dir 中剥离了前导目录名称,因此 Directory/A 变成了 A。我添加了引号以确保带有空格的目录名称不会引起问题(这是一个好习惯,即使您知道没有空格)。

作为字符串修改的替代方案,如果您首先更改目录,您可以简化此操作:

cd Directory

for dir in *; do
    program.pl "$dir/abc.xyz" > "processed/$dir-abc.xyz"
done

关于linux - 在子目录中的文件上执行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14889052/

相关文章:

python - 终端中的嵌套 For 循环

shell - 当脚本运行完成时,如何让控制台通知我

json - 使用 shell 替换特定行后的单词

linux - 从文件 shell 脚本中获取子字符串

linux - 来自 TCP 套接字的 HTTP 服务器(在 Go 中)

python - 无法向 iptables 添加规则,没有提交任何内容

linux - Beaglebone inittab 问题

PHP shell df -h 看不到外部驱动器

bash - 路径中文件的目录

regex - Sed - 删除字符串前的 x 个字符