2016-09-18 33 views
-1

我想基本上用這個shell腳本來做的事情是讓用戶通過控制檯輸入一個目錄,並將輸出結果放在該目錄內的所有.c文件以及其中的子目錄(這些文件是複製到腳本的當前位置)。如何在給定目錄輸入的情況下複製某些文件擴展名?

rsync -va --include "*/" --include '*.c' --exclude '*' "$1/" . 

然而,當我運行該腳本(SH test.sh DIRA)它將所有的1 $目錄中的子目錄的,什麼也沒有在他們裏面(甚至沒有.c文件)。我想輸出不是目錄,而只是.c文件。

所以,如果我在當前目錄中的ls應該出來一堆文件,如:file.c file1.c file2.c NOT dir1 dir2 dir3。

+1

SO是用於編程問題,而不是Unix技術支持。 – Barmar

回答

0

你應該簡單地忽略--exclude '*'。因爲它稍後在命令行中發生,所以在候選文件成功通過--include '*.c'測試並導致任何文件被拒絕之後應用它。

所以,簡單地複製給定的子樹內的任何.c文件在當前目錄層次結構使用純:

rsync -va --include '*.c' "$1" . 

編輯:

由於rsync是所有關於複製和同步層次結構,它是將層次結構展平成單個目錄的錯誤工具。對於這樣的操作,您將需要一個明確忽略目標端源路徑的命令(如普通的cp)。

E.g.在你的情況下,你可以使用:

find "$1" -name '*.c' -print0 | xargs -0 -I'{}' cp {} . 
+0

正在發送和檢索數據,但.c文件未移至任何位置。我可能錯誤地使用了rsync?我應該使用-cp而不是-va嗎? – Orcka

相關問題