あるディレクトリ内のすべてのファイル(隠しファイルを含む)を別のディレクトリに移動するには?
たとえば、「.hidden」ファイルと「notHidden」ファイルを含む「Foo」フォルダがある場合、これら2つのファイルを「Bar」というディレクトリに移動するにはどうすればよいですか。 「.hidden」ファイルが「Foo」に残っているため、以下は機能しません。
mv Foo/* Bar/
自分で試してみてください。
mkdir Foo
mkdir Bar
touch Foo/.hidden
touch Foo/notHidden
mv Foo/* Bar/
ベストアンサー1
早い回答を最初に確認してください。 bash、ksh93、zshの詳細な議論とドキュメントへのリンクについては、以下をご覧ください。
ジッシュ
mv Foo/*(DN) Bar/
または
setopt glob_dots null_glob
mv Foo/* Bar/
オプション名の大文字と小文字は無視されます。set -o
Korn / POSIX様シェルでも使用でき、dotglob
GNUシェル(bash)との互換性のために(DotGlob、DOT_GLOB ...)もサポートしています。
吹く
shopt -s dotglob nullglob
mv Foo/* Bar/
kensh93
ディレクトリが空でないことがわかっている場合:
FIGNORE='.?(.)'
mv Foo/* Bar/
魚
ディレクトリが空でないことがわかっている場合:
mv Foo/{.,}* Bar/
標準(POSIX)sh
for x in Foo/* Foo/.[!.]* Foo/..?*; do
if [ -e "$x" ]; then mv -- "$x" Bar/; fi
done
mv
コマンドが成功してもエラー状態を返すようにしたい場合は、はるかに簡単です。
mv Foo/* Foo/.[!.]* Foo/..?* Bar/
GNU検索とGNU mv
find Foo/ -mindepth 1 -maxdepth 1 -exec mv -t Bar/ -- {} +
標準検索
find Foo/. ! -name . -prune -exec sh -c 'mv -- "$@" "$0"' ../Bar/ {} +
bash、ksh93、および zsh で制御ポイントファイルが一致するかどうかについての詳細は、次のとおりです。
吹く
設定dotglob
オプション。
$ echo *
none zero
$ shopt -s dotglob
$ echo *
..two .one none zero
より柔軟です。GLOBIGNORE
変える、無視するワイルドカードパターンのコロンで区切られたリストに設定できます。設定されていない場合(デフォルト)dotglob
値が設定されている場合、シェルは値が空のように動作し、.*
オプションが設定されていない場合、シェルは値が空のように動作します。バラよりファイル名拡張子マニュアルに。ユニバーサルディレクトリ.
は、パターンと明示的に一致し..
ない限り常に省略されます。.
$ GLOBIGNORE='n*'
$ echo *
..two .one zero
$ echo .*
..two .one
$ unset GLOBIGNORE
$ echo .*
. .. ..two .one
$ GLOBIGNORE=.:..
$ echo .*
..two .one
kensh93
設定FIGNORE
変える。設定しないと(デフォルト)、シェルはこの値と同じように動作します.*
。.
sumを無視するには..
明示的に一致する必要があります(ksh 93s + 2008-01-31のマニュアルでは、.
sumが..
常に無視されることを示していますが、実際の動作を正しく説明していません。編集する この問題は解決されました。)。
$ echo *
none zero
$ FIGNORE='@(.|..)'
$ echo *
..two .one none zero
$ FIGNORE='n*'
$ echo *
. .. ..two .one zero
ドットファイルを含めることができます。模様明示的に一致させます。
$ unset FIGNORE
$ echo @(*|.[^.]*|..?*)
..two .one none zero
ディレクトリが空のときに拡張子を空にするには、パターン一致N
オプションである~(N)@(*|.[^.]*|..?*)
またはを使用します~(N:*|.[^.]*|..?*)
。
ジッシュ
% echo *
none zero
% setopt dot_glob
% echo *
..two .one none zero
.
..
パターンが.
先行と明示的に一致しても絶対一致しません。
% echo .*
..two .one
次のコマンドを使用して、特定のパターンでドットファイルを含めることができます。D
グローバル予選。
% echo *(D)
..two .one none zero
N
拡張機能が空のディレクトリに空のように見えるようにするには、glob修飾子を追加します*(DN)
。
注:および変数の設定方法によっては、ファイル名拡張の結果が異なる順序で表示されることがありますnone
。.one
..two
LC_COLLATE
LC_ALL
LANG