在bash(linux)中将文本从多个文件,相同名称复制到不同的路径

时间:2014-02-14 21:56:12

标签: text

我需要帮助将各种文件中的内容复制到其他文件(相同的名称和格式,不同的路径)。

例如,$HOME/initial/baby.desktop包含我需要写入$HOME/scripts/baby.desktop的文字。这对于单个文件来说非常简单,但我在$HOME/initial/中有2500个文件,在$HOME/scripts/中有相同的编号(相同的名称和格式)。我想将路径A中文件的内容追加(复制)到路径B(具有相同的名称和格式),到路径B中的文件末尾,而不删除路径B中文件的内容。

$HOME/initial/*.desktop到最终$HOME/scripts/*.desktop的示例内容。我尝试了以下方法,但它不起作用:

cd $HOME/initial/

for i in $( ls *.desktop ); do  egrep "Icon" $i  >> $HOME/scripts/$i; done

2 个答案:

答案 0 :(得分:0)

首先,我会备份$ HOME / initial和$ HOME / scripts,因为人们有很多误解你的问题。像这样:

cd $HOME
tar -cvf initial.tar initial
tar -cvf scripts.tar scripts

这会将$ HOME / initial中的所有文件放入名为initial.tar的单个tar文件中,并将$ HOME / scripts中的所有文件放入名为scripts.tar的单个tarfile中。

现在提出你的问题......一般来说,如果你想将FileB的内容放到FileA的末尾,命令是

cat FileB >> FileA

请注意 DOUBLE “>>”这意味着“附加”而不是单个“>”这意味着覆盖。

所以,我想你想这样做:

cd $HOME/initial/baby.desktop
cat SomeFile >> $HOME/scripts/baby.desktop/SomeFile

其中SomeFile是您选择要测试的任何文件的名称。我会测试它是否有效然后,如果您对此感到满意,请继续在循环中运行相同的命令:

cd $HOME/initial/baby.desktop
for SOURCE in *
do
   DESTINATION="$HOME/scripts/baby.desktop/$SOURCE"
   echo Appending "$SOURCE" to "$DESTINATION"
   #cat "$SOURCE" >> "$DESTINATION"
done

当输出看起来正确时,删除倒数第二行开头的“#”并再次运行。

答案 1 :(得分:0)

我解决了,如果有人想学习如何解决很简单:

使用Sed

我只需要匹配(或模式)行“Icon = / usr / share / some_picture.png到$ HOME / initial / example.desktop到其他同名和格式的$ HOME / scripts / example.desktop,但是我有很多.desktop文件(2500个文件)

cd $HOME/initial

STRING_LINE=`grep -l -R "Icon=" *.desktop`

for i in $STRING_LINE; do sed -ne '/Icon=/ p' $i >> $HOME/scripts/$i ; done

__ _ __ _ ___

如果您只需要将所有文件全部复制到具有相同名称和格式的其他文件

使用猫

cd $HOME/initial

STRING_LINE=`grep -l -R "Icon=" *.desktop`

for i in $STRING_LINE; do cat $i >> $HOME/scripts/$i ; done