2012-12-20 36 views
1

我想複製剛剛我已經造就了今天編輯成一個單獨的目錄「變更」的文件/文件,同時保持它們的目錄結構拷貝改變的文件,創建一個變更和維護的目錄結構

我想出了以下腳本

cd ./myproject/ 

find ./* -mtime -1 -daystart -exec cp {} ../changeset/{} \; 

上面的缺點是,目錄沒有創建,副本會引發錯誤。

我已經手動進入../changeset/並創建文件夾結構,直到該命令運行沒有錯誤..但多數民衆贊成有點乏味。

有沒有簡單的解決方案呢?

+0

CP有一個標誌創造的父母,我認爲這是-p,但不是100%肯定 – technosaurus

+0

@technosaurus有'的mkdir -p'但遺憾的是沒有'cp'等同。 'cp -p'和'cp --parents'存在但是做其他事情。 –

回答

2
find * -mtime -1 -daystart -print0 | cpio -pd0 ../changeset 

cpio是一個古老的,古怪的檔案程序,偶爾是這項工作的最佳工具。用-p它將在stdin上命名的文件複製到另一個目錄。隨着-d它根據需要創建目錄。

+0

我在Windows和MingW似乎沒有這個。 :( – Drew

0

我發現了另一個解決方案,它不像約翰的那麼優雅,但它不依賴於cpio,我沒有。

cd ./myproject/ 

# Create all directories 
find ./* -type d -exec mkdir ../changeset/{} \; 

# Copy files 
find ./* -mtime -1 -daystart -exec cp {} ../changeset/{} \; 

# Delete empty directories, run this several times because after moving a child the parent directory needs to be removed 
find ../changeset/ -type d -empty -exec rmdir {} \; 
相關問題