私がディレクトリを整理しているとしましょう。次のようになります。
.
├── 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に移動または中断されます。