0

以下を使用して、多数のファイル内の文字列のすべてのインスタンスを検索し、それらが見つかった行を削除しています。

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

ファイルが変更された日付を変更したくありません。これは、無関係なアプリケーションでファイルが表示される順序に影響を与えるためです。そのため、sed を実行する前に日付を取得し、ファイルに触れて、コマンドの最後にある古い変更日付を置き換えることができると考えていました。可能であれば、上記と統合された1つのコマンドですべてを実現したいと考えています。

4

2 に答える 2

2

次のコマンドを試してください。

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

このfindコマンドは、見つかったファイルごとに 3 つのステップを実行します。

  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 に答える