将文件名放入文本

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=],)}'