重複の可能性:
。と..を。*拡張から除外できますか?
私は知っています
mv * ~/whatever
mv .* ~/whatever
しかし、それは.
と..
を動かそうとします。それは、私にたくさんの苦痛を引き起こしました。 .*
ファイルを含むすべてのファイルをmvする方法はありますが、現在のディレクトリとその親を除外しますか?
Bashに2番目の文字があり、それはドットではないことを伝えてください。ただし、..file
のような名前のファイルは移動しません。
mv .[^.]* somewhere/
Bashのマニュアルから、shopt
セクション:
dotglob If set, bash includes filenames beginning with a `.' in the results
of pathname expansion.
shopt
は、マニュアルで説明されているように、特定の「シェルオプション」を設定するために使用できます。見る man bash
。
したがって、
shopt -s dotglob
mv * ~/whatever
あなたがやりたいことをします。たとえば、それをテストします。
shopt -s dotglob
ls -d *
一致するファイルを確認します。
マニュアルによると事実上のBashの方法であるため、トリッキーな名前のファイルに関して隠れた驚きが現れることはありません。もしそうなら、それは定義上、Bashのバグです。
これを試して:
mv .[a-zA-Z0-9]* ~/whatever
._
またはその他の英数字以外の文字で始まるドットファイルがない限り、すべてを取得する必要があります。
ディレクトリを移動したくない場合は、すべてのファイルを./foo/
に移動します。
$ find . -type f | while read n; do mv "$n" foo/; done
ディレクトリも実行する必要がある場合は、次を試してください。
$ find . | grep -vP '^\.$' | while read n; do mv "$n" foo/; done
.
と..
を除外するfindを使用します。
find . -name ".*" -mindepth 1 -maxdepth 1
結果を確認します。ファイルを移動するには
find . -name ".*" -mindepth 1 -maxdepth 1 -exec mv {} ~/whatever \;