[英]Find and copy files
為什么下面沒有將文件復制到目標文件夾?
# find /home/shantanu/processed/ -name '*2011*.xml' -exec cp /home/shantanu/tosend {} \;
cp: omitting directory `/home/shantanu/tosend'
cp: omitting directory `/home/shantanu/tosend'
cp: omitting directory `/home/shantanu/tosend'
如果您的目的是將找到的文件復制到/home/shantanu/tosend
,您可以顛倒cp
的參數順序:
find /home/shantanu/processed/ -name '*2011*.xml' -exec cp "{}" /home/shantanu/tosend \;
請注意: find
命令使用{}
作為匹配文件的占位符。
我遇到了這樣的問題......
實際上,您可以通過兩種方式在copy
命令中處理find
命令輸出
如果find
命令的輸出不包含任何空格,即如果文件名中不包含空格,那么您可以使用下面提到的命令:
語法: find <Path> <Conditions> | xargs cp -t <copy file path>
find <Path> <Conditions> | xargs cp -t <copy file path>
示例: find -mtime -1 -type f | xargs cp -t inner/
find -mtime -1 -type f | xargs cp -t inner/
但大多數情況下,我們的生產數據文件中可能包含空間。 所以大部分時間下面提到的命令更安全:
語法: find <path> <condition> -exec cp '{}' <copy path> \\;
示例find -mtime -1 -type f -exec cp '{}' inner/ \\;
在第二個例子中,最后一部分,即分號也被認為是find
命令的一部分,應該在按下 Enter 按鈕之前轉義。 否則你會得到類似這樣的錯誤
find: missing argument to `-exec'
在您的情況下,為了將查找文件復制到/home/shantanu/tosend
,復制命令語法是錯誤的。 以下命令將起作用:
find /home/shantanu/processed/ -name '*2011*.xml' -exec cp {} /home/shantanu/tosend \;
您需要使用cp -t /home/shantanu/tosend
來告訴它參數是目標目錄而不是源。 然后您可以將其更改為-exec ... +
以便讓cp
一次復制盡可能多的文件。
for i in $(ls); do cp -r "$i" "$i"_dev; done;
該錯誤的原因是您正在嘗試將需要 -r 選項的文件夾復制到 cp 謝謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.