私にはmain_dir
多くのサブフォルダがあり、DFT1
各DFT150
ディレクトリにはというフォルダがあります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*
すべてのファイルの名前付きディレクトリを検索します。OSZICAR
c
find
次に、ファイルが見つかったディレクトリ名(たとえば、nullバイトで終了)を印刷します。%h
DFT105
\0
- これはパイプを介して
xargs
ヌルバイトで終わる行を読み取り、それぞれを-0
呼び出します。rm -r
xargs
すべてが正常に機能していることを確認するには、アイテムを削除する前にその部分なしでコマンドを呼び出すことをお勧めします。
編集する:find
(OSXなど)オプションを受け入れない場合は、以下-printf
を使用してください。
find DFT*/OSZICAR -size -10c -exec sh -c 'rm -r $(dirname "$1")' sh {} \;