【问题标题】:listing directories as variables and then looping inside each directory in bash将目录列为变量,然后在 bash 中的每个目录中循环
【发布时间】:2014-10-28 22:54:16
【问题描述】:

我有一个目录列表

/this/is/my/path/* (dir1, dir2, dir3, etc)

在每个目录中,我都有多个文件。文件的各个名称放置在 .xml 文档中。到目前为止,我正在从每个目录中调用我的脚本,然后手动替换目录名称来代替 DIRECTORY,该目录位于打印的 .xml 中的某些区域。

这是我用来插入文件名的脚本。

for i in *.zip ; do
  i="${i%.*}"
  echo "$i";

echo "      <description>
        <name>$i</name>
        <file>this/is/my/path/DIRECTORY/$i.zip</file>
        <partner>/this/is/another/path/DIRECTORY/$i.png</partner>
      </description>">>DIRECTORY-list.xml

done

我知道我可以使用以下方法列出目录名称:

dir=/this/is/my/path/*
 for dirs in $dir
 do
   echo `basename $dirs`

但显然这仅列出了目录。我需要将目录的名称放在变量中($dir1、$dir2、$dir3 等),然后以某种循环在第一个脚本中运行,然后将整个循环的最终产品放入一个巨人中.xml 文件。

需要考虑的事项: - 文件名和目录名中可能有也可能没有空格。

我希望这个问题措辞得当。谢谢!

【问题讨论】:

  • 将文件循环粘贴在外循环中,并在循环中为*.zip添加前缀"$dir"

标签: xml bash loops variables


【解决方案1】:

循环遍历目录,对于每个目录,循环遍历其文件:

for dir in /this/is/my/path/*; do
    for i in $dir/*; do
        echo "$i";

        echo "      <description>
    <name>$i</name>
    <file>this/is/my/path/$dir/$i.zip</file>
    <partner>/this/is/another/path/$dir/$i.png</partner>
  </description>" >> $dir-list.xml

    done
done

【讨论】:

  • 哇...很简单。请注意,我在echo "$i"; 上方添加了三个新行。 dir="${dir##*/}"i="${i##*/}"i="${i%.*}"...只是为了取出所有文件路径和扩展名,而不必使用basename。谢谢!
猜你喜欢
  • 2019-01-22
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
  • 2016-03-11
  • 2019-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多