![如何为目录中找到的每个文件创建一个文本文件?](https://linux22.com/image/214224/%E5%A6%82%E4%BD%95%E4%B8%BA%E7%9B%AE%E5%BD%95%E4%B8%AD%E6%89%BE%E5%88%B0%E7%9A%84%E6%AF%8F%E4%B8%AA%E6%96%87%E4%BB%B6%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我是 Unix 新手,在执行这个循环时遇到了困难。
我有一个包含文件列表的目录,我可以在文本文件中列出所有这些文件。
我有一个包含以下内容的文本文件:
- 文件名01.xml
- 文件名02.xml
- 文件名03.xml
- 文件名NN.xml
我想为每个内容分别创建一个文本文件。输出应该是这样的:
- 文本文件的文件名:Filename01.txt - 文本文件的内容:FileName01.xml
等等等等
我正在尝试使用 for 循环为每个内容创建一个文本文件,但我似乎无法成功。
这是我当前正在编写的脚本:
#!/bin/bash
ls /directory/input > filelist.txt
for f in filelist.txt;
do
printf f > 'file_*.txt'
done
答案1
我建议
#!/bin/bash
shopt -s nullglob
for f in /directory/input/*.xml; do
bn=${f##*/}
printf '%s\n' "$bn" > "${f%.xml}.txt"
done
看外壳参数扩展有关前缀和后缀删除语法的说明。