ディレクトリ以外のファイルのみを移動する方法

ディレクトリ以外のファイルのみを移動する方法

私がディレクトリを整理しているとしましょう。次のようになります。

.
├── file_a.adoc
├── file_a.c
├── file_a.py
├── file_b.adoc
├── file_b.c
├── file_b.py
├── file_c.adoc
├── file_c.c
└── file_c.py

今私はこの時点にいます:

.
├── a
│   ├── file_a.adoc
│   ├── file_a.c
│   └── file_a.py
├── b
│   ├── file_b.adoc
│   ├── file_b.c
│   └── file_b.py
├── c
├── file_c.adoc
├── file_c.c
└── file_c.py

ディレクトリ以外のファイルをすべて dir c に移動するコマンドが必要です。

この例では、以下を使用できます。

mv *_c* c

ただし、より現実的なシナリオでは、把握するのに良いパターンがないか、パターンの識別に興味がない可能性があります。

ベストアンサー1

1つのアプローチは、「ファイルのすべての内容をcに移動する」を文字通り翻訳することです。

for f in *; do if [ -f "$f" ]; then mv "$f" c; fi; done

あるいは、if-thenの冗長さを避けてください。

for f in *; do [ -f "$f" ] && mv "$f" c; done

より良いことは、set -eシェルで失敗しないことです。

for f in *; do [ -f "$f" ] && mv "$f" c || true; done

私はタスクの1つが失敗した場合にのみ失敗することを好みます。

for f in *; do [ ! -f "$f" ] || mv "$f" c; done

文字通り:すべてのfに対してファイルではないか、cに移動または中断されます。

おすすめ記事