web-dev-qa-db-ja.com

Linux / Macで親ディレクトリを含めずにドットファイルをmvする方法は?

重複の可能性:
。と..を。*拡張から除外できますか?

私は知っています

mv * ~/whatever
mv .* ~/whatever

しかし、それは...を動かそうとします。それは、私にたくさんの苦痛を引き起こしました。 .*ファイルを含むすべてのファイルをmvする方法はありますが、現在のディレクトリとその親を除外しますか?

5
sprugman

Bashに2番目の文字があり、それはドットではないことを伝えてください。ただし、..fileのような名前のファイルは移動しません。

mv .[^.]* somewhere/
7
choroba

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のバグです。

7

これを試して:

mv .[a-zA-Z0-9]* ~/whatever

._またはその他の英数字以外の文字で始まるドットファイルがない限り、すべてを取得する必要があります。

0
Fran

ディレクトリを移動したくない場合は、すべてのファイルを./foo/に移動します。

$ find . -type f  | while read n; do mv "$n" foo/; done

ディレクトリも実行する必要がある場合は、次を試してください。

$ find . | grep -vP '^\.$' | while read n; do mv "$n" foo/; done
0
terdon

...を除外するfindを使用します。

find . -name ".*" -mindepth 1 -maxdepth 1

結果を確認します。ファイルを移動するには

find . -name ".*" -mindepth 1 -maxdepth 1 -exec mv {} ~/whatever \;
0
Matteo