Linux

如何僅移動非目錄文件

  • July 24, 2021

假設我正在組織一個目錄。它看起來像這樣:

.
├── 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

但在更現實的情況下,您可能沒有一個好的模式可以鎖定,或者可能不關心確定一個。

一種方法是“將文件中的所有內容移入 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

我的偏好,當且僅當其中一個動作失敗時才會失敗:

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

字面意思:對於每一個 f,要麼它不是一個文件,要麼它被移動到 c,或者我們中止。

引用自:https://unix.stackexchange.com/questions/659687