GNU/Linux >> Linux の 問題 >  >> Linux

すべてのファイル(非表示を含む)をあるディレクトリから別のディレクトリに移動するにはどうすればよいですか?

ディレクトリ内のすべてのファイル(非表示のファイルを含む)を別のディレクトリに移動するにはどうすればよいですか?

たとえば、「。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 変数。

関連:割り当てられたメモリ/ CPUのサーバーのクエリリスト?
Linux
  1. Linuxで特定の種類のファイルを検索してあるディレクトリから別のディレクトリにコピーする方法

  2. あるマシンから別のマシンに設定をコピーする方法は?

  3. 同じコンピュータ上のあるユーザーアカウントから別のユーザーアカウントにファイルを移動する方法は?

  1. すべてのJavaソースファイルをそれぞれのパッケージディレクトリに移動するにはどうすればよいですか?

  2. 1つのディレクトリを下に移動する方法は?

  3. CentOS / RHEL :ボリューム グループをあるシステムから別のシステムに移動する方法

  1. ある mysql データベースから別の mysql データベースにテーブルをコピーする方法

  2. ディレクトリ内のすべてのファイルで単語のすべての出現を変更する方法

  3. すべてのファイルを現在のディレクトリから上位ディレクトリに移動する方法は?