2016-09-14 92 views
0

我在基目錄下有多個子目錄。如果子目錄有x.jar,我需要在另一個路徑中複製一些可用的jar文件。如何使用find命令查找和替換jar文件

我正在使用下面的命令來找到x.jar,然後我試圖複製jar文件。

find . -type f -name x.jar | xargs cp /home/sampath.anisetti/tmp/*.jar 

我得到cp: target ./test3/x.jar不是目錄。

請提出建議。

注意:如果子目錄沒有x.jar該目錄需要在複製時跳過。

+0

你有沒有找到gnu? – 123

回答

2

如何:

find . -type f -name x.jar -print0 | 
    while IFS= read -r -d'' file; do 
     cp -- /home/sampath.anisetti/tmp/*.jar "$(dirname -- "$file")" 
    done 

它會找到一個名爲x.jar,然後每個這樣的文件,它會尋找到該文件所在的目錄中的所有文件,並複製那裏所有的其他*.jar文件。

+0

你能解釋'c''中'--'標誌的簽名用法嗎? – Inian

+1

@Inian這只是我在所有腳本中包含的一些標準預防措施。它確保'cp'(或'dirname')不會將文件名作爲命令行標誌,如果它以'-'開頭。 – redneb

+0

可以避免使用子shell,使用'process-substitution',就像'done <(find ...)'一樣。只是一個優化過程,否則'+ 1' – Inian