我需要帮助将各种文件中的内容复制到其他文件(相同的名称和格式,不同的路径)。
例如,$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
答案 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