Linux
如何僅移動非目錄文件
假設我正在組織一個目錄。它看起來像這樣:
. ├── 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,或者我們中止。