あるディレクトリから別のディレクトリにすべてのファイル(隠しファイルを含む)を移動するには?

あるディレクトリから別のディレクトリにすべてのファイル(隠しファイルを含む)を移動するには?

あるディレクトリ内のすべてのファイル(隠しファイルを含む)を別のディレクトリに移動するには?

たとえば、「.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 -oKorn / POSIX様シェルでも使用でき、dotglobGNUシェル(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:*|.[^.]*|..?*)

ジッシュ

設定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..twoLC_COLLATELC_ALLLANG

おすすめ記事