Bash

將列出目錄中的所有文件上移一級

  • November 17, 2018

我有一個目錄樹,我需要刪除其中一些並將這些目錄中的所有文件上移一層。

我知道如何一步一步做,但是有成千上萬個,所以我需要優化這個過程。

我查找目錄find . -type d -name 'src',然後我需要將找到的目錄中的所有文件向上移動一級(../)。

root
- one
-- two
--- src
- three
-- four
--- five
---- src

第一個的內容src應該移動到two,第二個srcfive

我怎樣才能用一個腳本做到這一點?

就像是:

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 ../ {} +

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