0

移動するファイルの場所のリストを含むテキスト ファイルを取得しました。最初に一時ディレクトリに移動し、ソース ディレクトリでいくつかの操作を行ってから、ファイルを元の場所に戻します。

リスト ファイルは、次のような find コマンドによって生成される形式です。

~/$ find . -name "*.[ch]" > ~/tmp/my_file_list.txt

現在sed、画面上のファイルを操作するために使用し、その出力をカットアンドペーストしてコマンドを発行しています。これは不快ですが、機能します:

~/$ sed -r 's_.+_cp & ~/tmp/_' ~/tmp/my_file_list.txt

(出力をコピーして貼り付けてから、ファイルを元に戻します)

~/$ sed -r 's_.+/(.+)_cp ~/tmp/\1 &_' ~/tmp/my_file_list.txt

(コピー ... 貼り付け ... ひるむ)

上記の 2 行をコピー アンド ペーストせずに単純に行うにはどうすればよいでしょうか。

[編集] スペースを処理するには:

~/$ sed -r 's_.+_cp "&" ~/tmp/_' ~/tmp/my_file_list.txt

~/$ sed -r 's_.+/(.+)_cp "~/tmp/\1" "&"_' ~/tmp/my_file_list.txt
4

2 に答える 2

3

bash出力を次のようにパイプするだけです。

~/$ sed -r 's_.+_cp & ~/tmp/_' ~/tmp/my_file_list.txt | bash
于 2011-09-23T19:30:27.553 に答える
0

コピーと貼り付けの問題を解決する回答が既に得られているようですが、実際にはこれを使用することをお勧めしrsyncます。シーケンスは次のようになります。

~/$ find . -name "*.[ch]" > ~/tmp/my_file_list.txt

バックアップするには:

~/$ rsync --files-from=tmp/my_file_list.txt . tmp/

元のファイルで何でもしてから、復元します。

~/$ rsync --files-from=tmp/my_file_list.txt tmp/ .

これには、変更していないファイルをコピーしないという (無視できる程度の) 利点があるため、ディスク アクティビティが少し節約されます。rsync異なるディレクトリに同じ名前の複数のファイルがある場合、相対パスが保持されるため、それらが衝突しないという無視できない利点があります。

于 2011-09-23T20:04:14.307 に答える