簡體   English   中英

查找和復制文件

[英]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命令輸出

  1. 如果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/

  2. 但大多數情況下,我們的生產數據文件中可能包含空間。 所以大部分時間下面提到的命令更安全:

    語法: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM