我可以使用什么 unix 命令来编写 Bash Shell 脚本来在一系列目录中创建文件?

我可以使用什么 unix 命令来编写 Bash Shell 脚本来在一系列目录中创建文件?

我需要编写一个 shell 脚本,从文件中获取目录列表(目录位于不同的行上),然后对于每个文件路径,它会.hiddenfile在每个目录中创建一个隐藏的虚拟文件(例如)。

瞧,我试图解决的问题是将空目录提交到源代码管理中,而我们使用的 Git 会忽略空文件。但是,我想知道是否可以重复使用此解决方案(即脚本获取目录列表并在每个目录中创建或编辑文件的部分)来解决其他问题。

目录列表将是绝对的,如下所示directories.txt::

/Users/johnnydoe/dir1/
/Users/johnnydoe/dir2/subdir2_1/
/Users/johnnydoe/dir3/subdir3_1/subdir3_2/
/Users/johnnydoe/dir4/
...

的内容.hiddenfile实际上是任意的。它只需要包含一些内容,以便 git 可以像这样提交文件:

# don't leave me out of source control

我只是不确定使用什么 Unix 命令来实现这一点。

顺便说一下,我正在使用 Mac OS X 版本的 Unix,如果这很重要的话。

如有任何建议,我们将不胜感激。

答案1

假设你的目录名或多或少是合理的(空格是可以的)这应该可以工作:

while read -r n; do \
   echo "# don't leave me out of source control" > "$n"/.hiddenfile; \
done < dirlist.txt

此脚本将遍历 中的目录列表dirlist.txt,并将每行保存为$n。然后它使用将所需的文本打印到每个目录中的echo文件中。.hiddenfile

答案2

xargs 非常适合针对列表中的每个参数执行命令。

例如(cygwin,OS X 也有 xargs):

$ find ~/tmp/ -type d | xargs.exe -Iz  echo echo $RANDOM \> "z/.hidden"   |sh
$ find ~/tmp -type f -name \.hidden |head -n4
/home/jaroslav/tmp/.hidden
/home/jaroslav/tmp/Data/.hidden
/home/jaroslav/tmp/Data/Meshes/.hidden
/home/jaroslav/tmp/Data/Meshes/actors/.hidden

find ~/tmp -type d可以替换为cat /path/dirlist.txt

管道的第一部分生成目录列表。第二部分创建一个命令,该命令将回显随机数(bash)并将其写入找到的目录中的文件中。管道的最后一部分执行这些命令。

答案3

使用“一行”代码tee

echo "# don't leave me out of source control" |
 tee $( while read -r; do echo "$REPLY/.hiddenfile"; done < directories.txt) \
 > /dev/null

相关内容