2014-06-13 30 views
0

我有我使用的所有文件複製一個文件夾中,並將其移動到一個新的文件夾...我用做它看起來像這樣整合的sed到發現xargs的複製shell命令

行腳本
find "$SOURCEFOLDER" -type f | xargs -I {} ln {} "$ENDFOLDER/$TR_NEW_TORRENT_NAME/${basename}" 

和它完美的作品

的事情是,我想也可以使用SED來自新文件的基本名稱中刪除任何括號,但我不知道如何將sed命令

sed -e 's/\[[^][]*\]//g' FILE 

h我會去做這件事嗎?有沒有更好或更簡單的方法來完成我想要的所有事情?

回答

1

我相信下面會爲你工作:

find "$SOURCEFOLDER" -type f -exec bash -c "sed -e 's/\[[^][]*\]//g' {} ; xargs -I {} ln {} "$ENDFOLDER/$TR_NEW_TORRENT_NAME/${basename}" \;

思想是將命令這個方式組合:

另一種方法是使用兩個-exec

find "$SOURCEFOLDER" -type f -exec sed -e 's/\[[^][]*\]//g' {}\; -exec ln {} "$ENDFOLDER/$TR_NEW_TORRENT_NAME/${basename}" \; 

希望這將有所幫助。

+0

這是否從基本名稱中的括號去掉?我很抱歉我沒有足夠詳細 –

+1

@MattZera我以爲sed -e's/\ [[^] [] * \] // g'FILE'爲你做了預期的工作,只是在查找中整合是一個問題。所以我用了你給的同樣的sed。 – PradyJord

+0

是的,你是正確的......它做的工作......但它是否在整個文件的目錄或只是基地名稱 –

1

您可以使用find-execdir選項此重命名並避免xargs乾脆:

find "$SOURCEFOLDER" -type f -execdir bash -c 'sed "s/\[[^][]*\]//g" <<< "$1"; 
    ln "$1" "$ENDFOLDER/$TR_NEW_TORRENT_NAME/${basename}"' - '{}' \; 
+0

這將重命名原始文件,然後將原始名稱傳遞給'ln'部分,因此此原始文件已被重命名,因此出現錯誤。另外,OP不想重命名原始文件。 –

+0

OP寫道'我想也使用sed從新文件的基本名稱中刪除任何括號,這對我的解釋是:OP正嘗試重命名原始文件。 (雖然我可能錯了) – anubhava

+1

Newfile≠原始文件。他想刪除新文件的括號。我可以想象他不想觸摸原始文件,以免混淆torrent客戶端。 - 你的命令也是錯誤的。如果有一個名爲'a [b]'的文件,那麼它被_first_重命名爲'a',然後_then_'find'發送原始文件名',即'a [b]'與'ln'命令鏈接;但是在這個時候,文件'a [b]'不再存在了。 –