.txtファイルを含む空でないディレクトリを削除しようとしたときにプロンプトを表示したいと思いますrmdir
。可能ですか?
答え1
@Praveen J Kumar、よく分からないので基本だけを扱うようにします。ここには4つの状況があります。
あなたするディレクトリを削除するときにメッセージを表示したいです。
-i
フラグは対話型セッション用であり、各ファイルを削除する前に尋ねます。-r
再帰のために、つまりディレクトリ全体とサブディレクトリなどを巡回する場合は、次のようにします。$ rm -ri <directory path>
あなたいいえディレクトリの削除時にメッセージを表示するには、次のようにします。
$ rm -r <directory path>
欲しいディレクトリから特定の種類のファイルのみを削除する。これを行うには、出力でフォーマットされていないすべてのファイルを選択する
ls -1
入力行を提供する次の行を使用できます(ここでフラグは大文字と小文字を区別せず、「jpg」文字列を除くすべての項目に適用されます。)たとえば、次を除くディレクトリ内のすべてのファイルを削除したいと思います。grep -iv "jpg"
ls
jpg
-i
-v
xargs rm
rm
grep
jpg
$ ls -1 one.txt three.jpg three.csv three.sh two.txt $ ls -1 | grep -iv "jpg" | xargs rm $ ls three.jpg
rmdir
空でないディレクトリはデフォルトで削除されないので大丈夫です:-).
最後の注意:フラグを選択したときに-i
ディレクトリにファイルが多い場合は、各ファイルのメッセージが表示され、退屈する可能性があります。
答え2
ディレクトリの削除を確認したい場合は、コマンドと同じフラグを提供しませrmdir
ん。ただし、空のディレクトリで作業している場合は終了コードを返します。たとえば、-i
rm
rmdir
0
$ mkdir emptydir && rmdir emptydir && echo $?
0
ご覧のとおり、空のディレクトリを削除するときに確認を要求しません。検証メカニズムを構築する唯一の方法は、rmdir
ラッパーと呼ばれるものを作成することですrmemptydir
。私は2つの異なるアプローチを示すために2つのバージョンを書きました。
好む方法
#!/bin/bash
[[ $# = 0 ]] && printf '%s\n' "rmdir [dirname]" exit 1
shopt -s nullglob dotglob
files=( ${1+"$1/"}* )
(( ${#files[*]} )) || { rm -ri "$1" && exit 1; } && printf '%s\n' "Dir not empty"
shopt -u nullglob dotglob
1)スクリプトはディレクトリ名である1つのパラメータを受け入れます。パラメータが指定されていない場合は終了
2) 位置パラメータ$1
格納ディレクトリ(要素を含む配列)
3) 配列の要素数を確認し、そうでない場合は else 実行0
に移動すると完了します。printf '%s\n' "Dir not empty"
rm -ri "$1" && exit 1
スタックのディレクトリとスタックのディレクトリにおよびをpushd
使用することを除いて、2番目のアプローチにも同じことが当てはまります。popd
push
pop
内部的にどのように機能するのだろうか?
set -x
すぐ下とすぐ後ろに配置して#!/bin/bash
取り外します。>/dev/null
pushd
popd
2番目の方法は以下を使用しますpushd
。popd
#!/bin/bash
if [[ $# = 0 ]]; then
printf '%s\n' "rmdir [dirname]"
exit 1
fi
shopt -s nullglob dotglob
pushd "$1" >/dev/null
files=(*)
(( ${#files[*]} )) || { popd >/dev/null && rm -ri "$1" && exit 0 ;} && printf '%s\n' "Dir not empty"
shopt -u nullglob dotglob
rmdir
空のディレクトリのみを削除でき、ディレクトリmusic.mp3
に1つあるため、次のことは機能しません。
mkdir emptydir && touch emptydir/music.mp3 && rmdir emptydir && echo $?
rmdir: failed to remove ‘emptydir’: Directory not empty