2013-01-15 40 views

回答

23

要遞歸移動文件,請合併findmv

find src/dir/ -name '*.txt' -exec mv {} target/dir/ \; 

要移動文件時重新命名文件,這會更棘手。一種方法是讓一個循環通過每個文件名通過tr/_,它將斜線轉換爲下劃線。

find src/dir/ -name '*.txt' | while read file; do 
    mv "$file" "target/dir/$(tr/_ <<< "$file")" 
done 
+0

這個版本可以與包含嵌入換行符的文件一起工作,或者以空格開頭:'find src/dir -name'* .txt'-exec bash -c'mv「$ 1」「$ {1 // \/_}「'_ {}';'' –

1

如果它只是一個級別:

mv *.txt */*.txt target/directory/somewhere/. 
11

試試這個:

find source -name '*.txt' | xargs -I files mv files target 

這將工作速度比-exec任何選項,因爲它不會調用燎MV過程爲每個需要移動的文件。

+0

偉大的解決方案,並認真快速... – Blacklight

+1

很多,比接受的答案快得多。請注意,爲了健壯性,使用以零結尾的文件名字符串是一個好主意:'find source -name'* .txt'-print0 | xargs -0 -I文件mv文件目標「 – cooperised

相關問題