Just another IT site ※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。At Your Own Risk!! TURN BACK WHILE YOU CAN
PR

Linuxで使用中ではないファイルのみをコピーする

※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。スクリプトはAI生成のものも多いのでコピー&ペーストの際は文字コードに注意ください!
AI による概要
Linuxで実行中でないファイルのみをコピーするには、findコマンドでファイルを探し出し、grepまたはlsofコマンドで実行中のプロセスに関連するファイルを除外し、その結果をcpコマンドに渡すのが一般的です。具体的な手順は以下の通りです。

  1. 使用中のファイルを見つける
lsofコマンドを使用すると、現在開かれているファイルとそのプロセスを表示できます。

ソースコード
    lsof | awk '{ print $4 }' | sort | uniq
このコマンドは、開かれている全ファイル名をリストアップします。

  1. 使用中でないファイルを探す
findコマンドでコピー対象のファイルを見つけ、grep -vで先ほど調べた使用中のファイルを除外します。

ソースコード
    find /path/to/source -type f | grep -v -f <(lsof | awk '{ print $4 }' | sort | uniq)
このコマンドでは、/path/to/sourceをコピー元のディレクトリに置き換えて使用します。

  1. コピーする
xargsコマンドとcpコマンドを組み合わせて、見つかった使用中でないファイルを指定のディレクトリにコピーします。

ソースコード
    find /path/to/source -type f | grep -v -f <(lsof | awk '{ print $4 }' | sort | uniq) | xargs -I {} cp {} /path/to/destination
/path/to/destinationをコピー先のディレクトリに置き換えて実行します。

補足

  • 上記の例はあくまで一例です。lsofコマンドの出力内容やシステム環境によって、awkの処理を調整する必要がある場合があります。
  • 対象とするファイルが非常に多い場合や、ディスクI/Oが集中している場合は、処理に時間がかかる可能性があります。
タイトルとURLをコピーしました