2011-12-15 174 views
2

我有一個名爲「week1」的文件夾,並且在該文件夾中有大約十個其他文件夾全部包含多個文件,其中包括一個名爲「submit.pdf」的文件夾。我希望能夠將所有「submit.pdf」文件複製到一個文件夾中,理想情況下使用終端來加快此過程。我試過cp week1/*/submit.pdf week1/以及cp week1/*/*.pdf week1/,但它只能複製一個文件。我只是意識到它每次都在寫每個文件,這就是爲什麼我被困在一個......有反正我可以防止這種情況發生嗎?如何使用終端從多個文件夾複製和重命名文件?

+0

is * submit.pdf *文件夾的名稱? (順便說一句,它看起來像你使用BASH或其他shell來做到這一點,而不是終端。終端(大概)是Mac OS X應用程序。) – kojiro 2011-12-15 17:54:27

+0

submit.pdf是我想要的文件的名稱複製。另外,我正在使用終端應用程序,但它在標題欄上顯示`bash`,所以必須是shell。雖然我不知道這意味着什麼。 – Travis 2011-12-15 21:25:47

+1

終端可讓您「進入」文本實用程序。你正在運行的shell是`bash`,Bourne Again SHell,它是Bourne Shell的Gnu版本。 – BRFennPocock 2011-12-15 22:22:24

回答

2

您沒有指明您的操作系統,但是如果您使用的是Gnu cp,則可以使用cp week1/*/submit.pdf --backup=t week/使其具有(任意)已存在的數字文件;但是,這不會給你任何真正的方法來確定哪個是哪個。

你可以,也許,做這樣的事情:

for file in week1/*/submit.pdf; do cp "$file" "${file//\//-}"; done 

...這將產生一個名爲類似文件「week1-子目錄提交。PDF」

對於它的價值,在"${var/s/r}"符號表示採取VAR,但將它的值之前,搜索小號\/,意爲/,躲過因爲在表達式中的其他特殊/的)與[R-)替換它,使唯一的文件名

編輯:有實際上是一個/在T這裏,使其匹配多次,使語法如下:

   "${ var   / /    \// - }" 
       take "var" replace every instance of/ with - 
1

find來救援!經驗法則:如果你可以用find列出你想要的文件,你可以複製它們。所以首先嚐試這樣的:

$ cd your_folder 
$ find . -type f -iname 'submit.pdf' 

一些注意事項:

  • find .意味着 「開始從當前目錄下找到」
  • -type -f手段 「只能找到普通文件」(即不是目錄)
  • -iname 'submit.pdf'「...不區分大小寫的名稱'submit.dpf'」。你不需要使用'quotation',但是如果你想使用通配符搜索,你需要。例如: -

    ~ foo$ find /usr/lib -iname '*.So*' 
    /usr/lib/pam/pam_deny.so.2 
    /usr/lib/pam/pam_env.so.2 
    /usr/lib/pam/pam_group.so.2 
    ... 
    

如果您想要搜索區分大小寫,只使用-name代替-iname

當這項工作時,您可以使用-exec命令複製每個文件。 exec通過讓你指定命令來使用命中來工作。它會爲每個文件運行命令find查找,並將該文件的名稱放入{}。您通過指定\;來結束命令序列。

所以要echo的所有文件,這樣做:

$ find . -type f -iname submit.pdf -exec echo Found file {} \; 

複製它們逐個:

$ find . -type f -iname submit.pdf -exec cp {} /destination/folder \; 

希望這有助於!

相關問題