Shell 从文件名列表创建目录和文件的脚本
Shell script to create directories and files from a list of file names
我(仍然)不是 shell 向导,但我正在尝试找到一种从文件名列表创建目录和文件的方法。
我们以这个源文件(source.txt
)为例:
README.md
foo/index.html
foo/bar/README.md
foo/bar/index.html
foo/baz/README.md
我将使用此命令删除空行和 trim 无用空格:
$ more source.txt | sed '/^$/d;s/^ *//;s/ *$//'
它将给我这个列表:
README.md
foo/index.html
foo/bar/README.md
foo/bar/index.html
foo/baz/README.md
现在我试图在每一行上循环并创建相关文件(它尚不存在),以及它的父目录。
我该怎么做?
理想情况下,我会把这个脚本放在一个别名中以便快速使用它。
一如既往,发布问题会让我结束问题...
我找到了一个令人满意的解决方案,在 for .. in
循环中使用 dirname
和 basename
:
for i in `cat source.txt | sed '/^$/d;s/^ *//;s/ *$//'`;
do mkdir -p `dirname $i`;
touch `echo $(dirname $i)$(echo "/")$(basename $i)`;
done
这一行命令将:
- 读取文件名列表
- 创建目录
- 在自己的目录中创建空文件
我(仍然)不是 shell 向导,但我正在尝试找到一种从文件名列表创建目录和文件的方法。
我们以这个源文件(source.txt
)为例:
README.md
foo/index.html
foo/bar/README.md
foo/bar/index.html
foo/baz/README.md
我将使用此命令删除空行和 trim 无用空格:
$ more source.txt | sed '/^$/d;s/^ *//;s/ *$//'
它将给我这个列表:
README.md
foo/index.html
foo/bar/README.md
foo/bar/index.html
foo/baz/README.md
现在我试图在每一行上循环并创建相关文件(它尚不存在),以及它的父目录。
我该怎么做?
理想情况下,我会把这个脚本放在一个别名中以便快速使用它。
一如既往,发布问题会让我结束问题...
我找到了一个令人满意的解决方案,在 for .. in
循环中使用 dirname
和 basename
:
for i in `cat source.txt | sed '/^$/d;s/^ *//;s/ *$//'`;
do mkdir -p `dirname $i`;
touch `echo $(dirname $i)$(echo "/")$(basename $i)`;
done
这一行命令将:
- 读取文件名列表
- 创建目录
- 在自己的目录中创建空文件