Bash
將列出目錄中的所有文件上移一級
我有一個目錄樹,我需要刪除其中一些並將這些目錄中的所有文件上移一層。
我知道如何一步一步做,但是有成千上萬個,所以我需要優化這個過程。
我查找目錄
find . -type d -name 'src'
,然後我需要將找到的目錄中的所有文件向上移動一級(../
)。root - one -- two --- src - three -- four --- five ---- src
第一個的內容
src
應該移動到two
,第二個src
到five
我怎樣才能用一個腳本做到這一點?
就像是:
find . -type d -name src -exec sh -c 'cd "$1"; for f in *; do mv -i "$f" .. ; done' find-sh {} \;
注意
-i
標誌到mv
。如果它要求您確認是否要覆蓋某些內容,除非您期待它,否則您應該說“不”。既然您說您還想在
src
之後刪除目錄,請使用:find . -type d -name src -exec sh -c 'cd "$1"; for f in *; do mv -i "$f" .. ; done' find-sh {} \; -exec rmdir {} \;
先做好備份。
假設在每個級別中沒有嵌套
src
的子目錄並且src
是最新的目錄級別,那麼下面應該可以完成這項工作。find . -path '*/src/*' -type f -execdir echo mv -t ../ {} +