将文件名放入文本
Put file names into text
我至少有 40 个文件(20 个 xml.
格式,20 个 safe.
格式)。
例如其中的一些:
iw1-20150612.SAFE.safe
iw2-20150714.SAFE.safe
iw1-20150612.xml
iw2-20150714.xml
我想把这个文件名放在一个txt文件中,在Linux中通过终端在文本的某个地方(或者在这个过程中添加文本)
文本可以任意,例如:
anytext iw1-20150612.SAFE.safe
anytext2 iw1-20150612.xml anytext2 iw1-20150612.xml
anytext Iw2-20150714.SAFE.safe
anytext2 iw2-20150714.xml anytext2 iw2-20150714.xml
我这里需要的例子:
awk 'NR>1 {print [=12=]}' < ../og/iw1-20150612.SAFE.safe > tmp_file
cat ../og/iw1-20150612.xml tmp_file ../og/m.xml > ./iw1-20150612.xml
awk 'NR>1 {print [=12=]}' < ../og/iw2-20150714.SAFE.safe > tmp_file
cat ../og/iw2-20150714.xml tmp_file ../og/m.xml > ./iw2-20150714.xml
#and etc
保持按文件夹中的文件名排序也很重要。
我的尝试:
find /any/directory/ -type f -printf "%f\n" >> data.txt
但我不知道如何'choose a place'插入文本。
您可以使用简单的 bash for 循环遍历文件名。只要每个safe
文件都有对应的xml
文件,就可以
- 遍历
safe
个文件,
- 获取不带扩展名的基本文件名
- 并从那里创建
xml
文件名和文本
script.sh
#!/bin/bash
OUTFILE=textfile
EXTENSION=.SAFE.safe
# rm -rf "$OUTFILE" # uncomment if required
for f in *${EXTENSION}
do
# f i a .. safe file we remove the extension
base=${f%%$EXTENSION}
echo -e "anytext $f\nanytext2 ${base}.xml anytext2 ${base}.xml" >> "$OUTFILE"
done
根据需要设置 OUTFILE
,根据需要取消注释 rm
。
使用awk更新
如果您有很多文件并且 bash for 循环由于频繁写入 $OUTFILE
而变慢,这里有一个更 shell 风格的相同想法的版本:
- 我们将
SAVE.safe
文件名通过管道传输到 awk,
- 使用点作为字段分隔符(因此
</code> 是基本名称,<code>[=21=]
原始文件名)
并使用 printf
:
创建所需的文本
ls -1 *.SAFE.safe | awk -F. '{printf("anytext %s\nanytext2 %s.xml anytext2\n",[=11=],)}'
我至少有 40 个文件(20 个 xml.
格式,20 个 safe.
格式)。
例如其中的一些:
iw1-20150612.SAFE.safe
iw2-20150714.SAFE.safe
iw1-20150612.xml
iw2-20150714.xml
我想把这个文件名放在一个txt文件中,在Linux中通过终端在文本的某个地方(或者在这个过程中添加文本)
文本可以任意,例如:
anytext iw1-20150612.SAFE.safe
anytext2 iw1-20150612.xml anytext2 iw1-20150612.xml
anytext Iw2-20150714.SAFE.safe
anytext2 iw2-20150714.xml anytext2 iw2-20150714.xml
我这里需要的例子:
awk 'NR>1 {print [=12=]}' < ../og/iw1-20150612.SAFE.safe > tmp_file
cat ../og/iw1-20150612.xml tmp_file ../og/m.xml > ./iw1-20150612.xml
awk 'NR>1 {print [=12=]}' < ../og/iw2-20150714.SAFE.safe > tmp_file
cat ../og/iw2-20150714.xml tmp_file ../og/m.xml > ./iw2-20150714.xml
#and etc
保持按文件夹中的文件名排序也很重要。 我的尝试:
find /any/directory/ -type f -printf "%f\n" >> data.txt
但我不知道如何'choose a place'插入文本。
您可以使用简单的 bash for 循环遍历文件名。只要每个safe
文件都有对应的xml
文件,就可以
- 遍历
safe
个文件, - 获取不带扩展名的基本文件名
- 并从那里创建
xml
文件名和文本
script.sh
#!/bin/bash
OUTFILE=textfile
EXTENSION=.SAFE.safe
# rm -rf "$OUTFILE" # uncomment if required
for f in *${EXTENSION}
do
# f i a .. safe file we remove the extension
base=${f%%$EXTENSION}
echo -e "anytext $f\nanytext2 ${base}.xml anytext2 ${base}.xml" >> "$OUTFILE"
done
根据需要设置 OUTFILE
,根据需要取消注释 rm
。
使用awk更新
如果您有很多文件并且 bash for 循环由于频繁写入 $OUTFILE
而变慢,这里有一个更 shell 风格的相同想法的版本:
- 我们将
SAVE.safe
文件名通过管道传输到 awk, - 使用点作为字段分隔符(因此
</code> 是基本名称,<code>[=21=]
原始文件名) 并使用
创建所需的文本printf
:ls -1 *.SAFE.safe | awk -F. '{printf("anytext %s\nanytext2 %s.xml anytext2\n",[=11=],)}'