ファイルサイズを検出し、条件付きで操作を実行します。

ファイルサイズを検出し、条件付きで操作を実行します。

私にはmain_dir多くのサブフォルダがあり、DFT1DFT150ディレクトリにはというフォルダがありますOSZICAR。ただし、そのうちのいくつかのファイルのサイズは0です。

そのため、各フォルダに入ってサイズを確認し、OSZICARサイズが10バイト未満の場合はそのDFTフォルダを削除するスクリプトが必要です。

動作しない私の擬似コードは次のとおりです。

for f in *; do
 cd $f
 status=(check whether OZICAR has size below 10bytes)
 cd ..
 if (status); do
  rm -r $f
 fi 
done

答え1

使用find:

find DFT*/OSZICAR -size -10c -printf "%h\0" | xargs -r0 rm -r
  • findファイルサイズが10バイト未満のDFT*すべてのファイルの名前付きディレクトリを検索します。OSZICARc
  • find次に、ファイルが見つかったディレクトリ名(たとえば、nullバイトで終了)を印刷します。%hDFT105\0
  • これはパイプを介してxargsヌルバイトで終わる行を読み取り、それぞれを-0呼び出します。rm -r

xargsすべてが正常に機能していることを確認するには、アイテムを削除する前にその部分なしでコマンドを呼び出すことをお勧めします。

編集する:find(OSXなど)オプションを受け入れない場合は、以下-printfを使用してください。

find DFT*/OSZICAR -size -10c -exec sh -c 'rm -r $(dirname "$1")' sh {} \;

関連情報