ディレクトリ内のすべてのファイル(非表示のファイルを含む)を別のディレクトリに移動するにはどうすればよいですか?
たとえば、「。hidden」と「notHidden」のファイルが含まれる「Foo」フォルダがある場合、両方のファイルを「Bar」という名前のディレクトリに移動するにはどうすればよいですか。 「.hidden」ファイルは「Foo」にとどまるため、以下は機能しません。
mv Foo/* Bar/
自分で試してみてください。
mkdir Foo
mkdir Bar
touch Foo/.hidden
touch Foo/notHidden
mv Foo/* Bar/
承認された回答:
Zsh
mv Foo/*(DN) Bar/
または
setopt -s glob_dots
mv Foo/*(N) Bar/
((N)
は省略してください ディレクトリが空でないことがわかっている場合。)
バッシュ
shopt -s dotglob nullglob
mv Foo/* Bar/
Ksh93
ディレクトリが空でないことがわかっている場合:
FIGNORE='.?(.)'
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検索とGNUmv
find Foo/ -mindepth 1 -maxdepth 1 -exec mv -t Bar/ -- {} +
標準検索
ソースディレクトリに変更してもかまわない場合:
cd Foo/ &&
find . -name . -o -exec sh -c 'mv -- "[email protected]" "$0"' ../Bar/ {} + -type d -prune
ドットファイルが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
Ksh93
FIGNORE
を設定します 変数。設定されていない場合(デフォルト設定)、シェルは値が。*
であるかのように動作します。 。 を無視します。
および..
、明示的に一致させる必要があります(ksh 93s + 2008-01-31のマニュアルには、。
と記載されています。 および..
常に無視されますが、これは実際の動作を正しく説明していません。
$ 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:*|。[^。]* | ..?*)
。
Zsh
dot_glob
を設定します オプション。
% 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
変数。