2012-12-13 113 views
0

我正在使用以下命令在多個文件中查找字符串的所有實例,並刪除找到它們的行。可能grep和修改/觸摸文件修改日期?

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

我不想改變文件的修改日期,因爲該文件是在一個不相關的應用顯示的順序上的影響。所以我想我可以在執行sed之前抓住日期,然後觸摸文件並在命令末尾替換舊的修改日期。如果可能的話,我希望將這一切與上述內容整合在一起。

回答

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刪除備份
+0

完美,非常感謝你! – user1166981

+0

dogbane,這是否會在文件系統周圍留下.bak文件?或者他們都被刪除後? – user1166981

+0

他們會被刪除,正如我在步驟3中指出的。 – dogbane

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 

+0

如果文件名包含空格,則失敗。 '':-(。 –