我是 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
看外壳参数扩展有关前缀和后缀删除语法的说明。