我正在使用以下命令在多個文件中查找字符串的所有實例,並刪除找到它們的行。可能grep和修改/觸摸文件修改日期?
find . -maxdepth 1 -xdev -type f -exec sed -i '/teststring/Id' {} \;
我不想改變文件的修改日期,因爲該文件是在一個不相關的應用顯示的順序上的影響。所以我想我可以在執行sed之前抓住日期,然後觸摸文件並在命令末尾替換舊的修改日期。如果可能的話,我希望將這一切與上述內容整合在一起。
我正在使用以下命令在多個文件中查找字符串的所有實例,並刪除找到它們的行。可能grep和修改/觸摸文件修改日期?
find . -maxdepth 1 -xdev -type f -exec sed -i '/teststring/Id' {} \;
我不想改變文件的修改日期,因爲該文件是在一個不相關的應用顯示的順序上的影響。所以我想我可以在執行sed之前抓住日期,然後觸摸文件並在命令末尾替換舊的修改日期。如果可能的話,我希望將這一切與上述內容整合在一起。
試試下面的命令:
find . -maxdepth 1 -xdev -type f -exec sed -i.bak '/teststring/Id' {} \; -exec touch -r {}.bak {} \; -exec rm {}.bak \;
的find
命令執行三個步驟找到的每個文件:
sed
改變了文件,並創建原始文件的備份(與.bak
擴展)touch
將新文件的時間戳設置爲與備份相同rm
刪除備份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
做
如果文件名包含空格,則失敗。 '':-(。 –
完美,非常感謝你! – user1166981
dogbane,這是否會在文件系統周圍留下.bak文件?或者他們都被刪除後? – user1166981
他們會被刪除,正如我在步驟3中指出的。 – dogbane