rm -rf /some/path/*
は、そのディレクトリ(およびサブディレクトリ)の非表示ではないファイルをすべて削除します。
rm -rf /some/path/.*
は、そのディレクトリのすべての隠しファイルを削除します(サブディレクトリは削除しません)。また、次のエラー/警告も表示します。
rm: cannot remove directory: `/some/dir/.'
rm: cannot remove directory: `/some/dir/..'
.
および..
に関する警告/エラーを受信せずに、ターゲットディレクトリ内のすべての非表示および非非表示のファイルとフォルダーを再帰的に削除する適切な方法は何ですか?
エラーメッセージはいつでも/dev/null
に送信できます
rm -rf /some/path/.* 2> /dev/null
あなたも
rm -rf /some/path/
mkdir /some/path/
...そもそも隠しファイルを気にする必要はありません。
*
はすべての非ドットファイルに一致し、.[!.]*
は.
を除くすべてのドットファイルと..
で始まるファイルに一致し、..?*
はすべてのドットファイルに一致します- ..
を除くドットファイル。これらは一緒に、.
と..
以外のすべてのファイルに一致します。これら3つのパターンのいずれも一致しない場合、それ自体に拡張されます。 rm -f
は、存在しない引数を考慮しないため、これは問題ではありません。
rm -rf ..?* .[!.]* *
find
を使用することもできます。これはより複雑ですが、ファイルが多すぎて上記のワイルドカードがシステムのコマンドラインの長さの制限を超えて拡張される場合でも機能するという利点があります。
find . -name . -o -Prune -exec rm -rf -- {} +
ディレクトリを削除して再作成する方がわかりやすいかもしれません。これには、別のプログラムが同時に元のディレクトリにファイルを作成している場合でも、空のディレクトリが作成されるという利点(または場合によってはマイナス面)があります。
これがほとんどのLinuxディストリビューションで最も便利な方法であることに気づきました:
ls -A1 | xargs rm -rf
どこ
-A
=すべてを一覧表示除く.
および..
-1
=すべてのアイテムを1行に入れる
シェルのdotglob
オプションを変更して*
を使用するか、find
のようなものを使用します。
find somedir -mindepth 1 -delete
これは@Gillesの回答と同じように機能しますが、よりコンパクトになります。
rm -rf {,.[!.],..?}*
または
rm -rf dir/to/files/{,.[!.],..?}*
安全のために、スクリプトで使用するためにif
も追加する必要があります。
if [ -d "$DIR" ]; then
rm -rf ${DIR}/{,.[!.],..?}*
fi
に関する警告/エラーを受信せずに、ターゲットディレクトリ内のすべての非表示および非非表示のファイルとフォルダを再帰的に削除する適切な方法は何ですか。そして..?
問題のディレクトリが./dir
であるとすると、
rm -rf ./dir
隠しファイルと隠しディレクトリを含む./dir
内のすべてのファイルを再帰的に削除し、./dir
ディレクトリ自体も削除します。
ディレクトリ自体を削除したくない場合は、後で再作成するか、または
find ./dir -mindepth 1 -delete
または、find
が-delete
をサポートしていない場合、
find ./dir -mindepth 1 -depth -exec rm -rf {} ';'
-mindepth 1
を使用すると、トップレベルのディレクトリ./dir
を保持できます。
あなたの友達です。
find ! -name '.' ! -name '..' -delete
% find ! -name '.' ! -name '..'
./test
./test4
./test4/.test6
./test3
./.test5
./test2
% find ! -name '.' ! -name '..' -delete
% find ! -name '.' ! -name '..'
%
現在のディレクトリ($ PWD)以外のものを再帰的に検索する場合は、find
コマンドの直後にパスを追加します。例:find /path ! -name '.' ! -name '..' -delete
。 n
個のディレクトリのみを降りたい場合は、-maxdepth n
パラメータの直後に/path
オプションを使用します。
上記のコマンドは、Ubuntu 13.04システムでテストされました。他の最新のLinuxシステムで動作する可能性があります。
試してみることをお勧めします
ターン-[〜#〜]オン[〜#〜]dots(隠しファイル)
セットdotglob
shopt -s dotglob
ターン-[〜#〜]オフ[〜#〜]dots
未設定dotglob
shopt -u dotglob
この方法は、Iwishedでcopyコマンドに対して、隠しディレクトリ。
shopt -s dotglob
cp -rvn ./$from/* ./$too/
shopt -u dotglob
だから私は削除(削除)をしました、そしてoops...
shopt -s dotglob
rm -fr ../message_splitter--044a/*
shopt -u dotglob
...それも機能します!
you親愛なる読者がmessage_splitter
ディレクトリを見ることができないのが私には思い当たります。どのような方法でも、削除してコピーする必要がある.svn
フォルダがあります。
man
ページから...
dotglob
設定されている場合、bashには「。」で始まるファイル名が含まれます。パス名展開の結果。
参照:
あなたが試すことができます
rm -rf /some/path/*.*