2012-02-16 39 views
0

我有一個主文件夾「Abc」,它有大約800個子文件夾。這些子文件夾中的每一個都包含許多文件(所有格式相同,例如「.doc」)。如何使用所有這些文件創建一個主文件夾(而不是分發到子文件夾中)。我正在使用cygwin終端在Windows 7機器上執行此操作。將子文件夾合併在一起,Linux

cp -r命令複製它,但將文件留在子文件夾中,所以它沒有多大幫助。我很感謝這方面的援助。謝謝!

回答

4

假設可能存在名稱衝突和多個擴展名,這將創建uni隊列名稱,將目錄路徑改爲破折號(例如a/b/c.doc將變爲a-b-c.doc)。從您要摺疊的文件夾中運行以下命令:

# if globstar is not enabled, you'll need it. 
shopt -s globstar 
for file in */**; do [ -f "$file" ] && mv -i "$file" "${file//\//-}"; done 
# get rid of the now-empty subdirectories. 
find . -type d -empty -delete 

如果你能保證唯一的名稱,這將移動文件並刪除子目錄。你可以改變兩個. s到一個文件夾的名稱,並從外部運行它說文件夾:

find . -depth \(-type f -exec mv -i {} . \; \) -o \(-type d -empty -delete \) 
+0

這完美謝謝! – dawnoflife 2012-02-16 18:07:17

0

這可能不是最優雅的或有效的方式來做到這一點,但我相信它會完成你想要的:

for file in `find abc` 
do 
    if [ -f $file ] 
    then 
    mv $file `basename $file` 
    fi 
done 

迭代通過ABC的一切,檢查它是否是一個文件(不是目錄),然後將其從當前位置(例如abc/d/example.txt)移動到abc/

編輯:這將使所有子文件夾保留在原位(但它們現在爲空)

+0

事實上,我認爲,如果任何文件名有空格,這對於將拆分那些文件,將工作名稱,它不會工作。我相信這會: 'find abc -type f | xargs -I {} mv {} flat' 這會將它們全部移到名​​爲flat的目錄 – user1033563 2012-02-16 16:57:58

+0

至少引用'$ file'。 – Kevin 2012-02-16 17:02:26

相關問題