2009-12-31 29 views
1

我是新來的MS一批編程的備份。批處理腳本把所有的* .c和* .h文件

我想用正則表達式匹配到目的地,相同的目錄結構複製文件。如果我使用dir/b/s,我會得到源代碼的完整路徑,那麼我如何從源代碼路徑中獲取相對路徑?

我想基於DOS批處理腳本當量的bash腳本這樣的事情,

file_list=`find ./abc/test -name "*.c"` 
for file_n in $file_list 
do 
    cp $file_n $targetdir/$file_n 
done 
+0

我認爲這個問題是比較適合superuser.com – notnoop

+0

請讓我知道關閉此問題之前的答案。這對我真的很有幫助。 此外,我認爲它的編程相關的問題,所以在這裏問。 –

+0

如果移動時關閉,則會出現一個鏈接,您可以按照其中的其他人可以添加答案的地址訪問superuser.com。 –

回答

0

我覺得更簡單的方法,就是使用pushd/popd

pushd abs/test 
file_list=`find . -name "*.[ch]"` 
for file_n in $file_list 
do 
    cp $file_n $targetdir/$file_n 
done 
popd 
+0

我想要基於DOS的批處理腳本相當於此。抱歉不清楚。 –

4

一般來說源控制嘴皮子如果源文件的備份更合適......

+1

+1不能同意更多。假定存儲庫位於不同的驅動器上。 – notnoop

0

您可以使用tar與管正常複製目錄層次結構:

find . -name '*.[ch]' -exec tar cf - '{}' '+' | tar xf - -C $targetdir 
0
tar cvf backup-`date +%Y%m%d`.tar `find . -name "*.[ch]" -print` 

將創建所需的文件的日期的tar文件。這可能更容易管理。

0

與批次,

@echo off 
for /F %%A in ('dir /b/s c:\test\*.c c:\test\*.h') do (
    echo copy "%%A" c:\destination 
) 

中的回聲實際拷貝

+0

@ ghostdog74 ...它不會重新創建目錄結構。這就是我的問題。 –

0

robocopy命令可能會做你想要什麼,但你沒有說你有什麼版本的Windows(或者是真的是DOS而不是CMD?)。

robocopy -s sourcedir destdir *.c *.h 

xcopy可能爲你工作

xcopy /s *.c \destdir\ 
xcopy /s *.h \destdir\