0

我正在使用以下内容在多个文件中查找字符串的所有实例并删除找到它们的行。

find . -maxdepth 1 -xdev -type f -exec sed -i '/teststring/Id' {} \;

我不想更改文件的修改日期,因为这会影响文件在不相关应用程序中的显示顺序。所以我想我可以在执行 sed 之前获取日期,然后触摸文件并在命令末尾替换旧的修改日期。如果可能的话,我希望将所有这些都集成到一个命令中。

4

2 回答 2

2

尝试以下命令:

find . -maxdepth 1 -xdev -type f -exec sed -i.bak '/teststring/Id' {} \; -exec touch -r {}.bak {} \; -exec rm {}.bak \;

find命令对找到的每个文件执行三个步骤:

  1. sed更改文件并创建原始文件的备份(带有.bak扩展名)
  2. touch将新文件的时间戳设置为与备份相同
  3. rm删除备份
于 2012-12-13T15:25:51.783 回答
1
for file in $(find . -maxdepth 1 -xdev -type f )
do
   mod_time=$(stat --format=%y $file)
   perl -wpl -i -e 's!teststring!!' $file
   touch -d ''$mod_time'' $file

完毕

于 2012-12-13T15:39:52.297 回答