我有一個主文件夾「Abc」,它有大約800個子文件夾。這些子文件夾中的每一個都包含許多文件(所有格式相同,例如「.doc」)。如何使用所有這些文件創建一個主文件夾(而不是分發到子文件夾中)。我正在使用cygwin終端在Windows 7機器上執行此操作。將子文件夾合併在一起,Linux
cp -r
命令複製它,但將文件留在子文件夾中,所以它沒有多大幫助。我很感謝這方面的援助。謝謝!
我有一個主文件夾「Abc」,它有大約800個子文件夾。這些子文件夾中的每一個都包含許多文件(所有格式相同,例如「.doc」)。如何使用所有這些文件創建一個主文件夾(而不是分發到子文件夾中)。我正在使用cygwin終端在Windows 7機器上執行此操作。將子文件夾合併在一起,Linux
cp -r
命令複製它,但將文件留在子文件夾中,所以它沒有多大幫助。我很感謝這方面的援助。謝謝!
假設可能存在名稱衝突和多個擴展名,這將創建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 \)
這可能不是最優雅的或有效的方式來做到這一點,但我相信它會完成你想要的:
for file in `find abc`
do
if [ -f $file ]
then
mv $file `basename $file`
fi
done
迭代通過ABC的一切,檢查它是否是一個文件(不是目錄),然後將其從當前位置(例如abc/d/example.txt)移動到abc/
編輯:這將使所有子文件夾保留在原位(但它們現在爲空)
事實上,我認爲,如果任何文件名有空格,這對於將拆分那些文件,將工作名稱,它不會工作。我相信這會: 'find abc -type f | xargs -I {} mv {} flat' 這會將它們全部移到名爲flat的目錄 – user1033563 2012-02-16 16:57:58
至少引用'$ file'。 – Kevin 2012-02-16 17:02:26
這完美謝謝! – dawnoflife 2012-02-16 18:07:17