Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud storage 是否有一种快速方法可以确定gsutil cp未能复制哪个文件?_Google Cloud Storage_Gsutil - Fatal编程技术网

Google cloud storage 是否有一种快速方法可以确定gsutil cp未能复制哪个文件?

Google cloud storage 是否有一种快速方法可以确定gsutil cp未能复制哪个文件?,google-cloud-storage,gsutil,Google Cloud Storage,Gsutil,当我执行这个命令时 $ cat sending.csv | gsutil -m cp -I gs://my-bucket/ 我得到这样的输出 Copying file://000000000077.jpg [Content-Type=image/jpeg]... CommandException: No URLs matched: Copying file://0

当我执行这个命令时

$ cat sending.csv | gsutil -m cp -I gs://my-bucket/
我得到这样的输出

Copying file://000000000077.jpg [Content-Type=image/jpeg]...                    
CommandException: No URLs matched:                                              
Copying file://000000000086.jpg [Content-Type=image/jpeg]...

...
Copying file://000000002536.jpg [Content-Type=image/jpeg]... ETA 00:00:00       
| [261/261 files][ 41.1 MiB/ 41.1 MiB] 100% Done   3.7 MiB/s ETA 00:00:00       
Operation completed over 261 objects/41.1 MiB.                                   
CommandException: 1 file/object could not be transferred.
我需要知道哪个文件传输失败,但我看不到一个简单的方法来获取这些信息

成功传输错误消息前后的文件

$ gsutil ls gs://my-bucket/000000000077.jpg
gs://my-bucket/000000000077.jpg
$ gsutil ls gs://my-bucket/000000000086.jpg
gs://my-bucket/000000000086.jpg
在sending.csv文件中,它们之间没有文件

$ cat sending.csv | nl | head
...
     5  000000000077.jpg
     6  000000000086.jpg
我尝试将-D选项传递给gsutil,但是输出太多,无法快速找到无法复制的单个文件

为了将要发送的文件列表与bucket中实际存储的文件列表进行比较,我执行了以下操作:

gsutil ls gs://my-bucket/*.jpg | sort | sed 's!.*/!!' > sent.csv
diff sending.csv sent.csv
但未发现任何差异。

我想知道gsutil认为哪个文件传输失败。

您可以使用
gsutil cp-L cp.log…
,它将以所述格式记录每个操作的日志


可选地,如果您只想重新运行该操作来复制未成功传输的文件,您可以考虑使用.< /p>,可以使用<代码> GSUTIL CP-L CP.log…<代码>,它将记录所描述的格式的每个操作的日志。


可选地,如果您只想重新运行该操作来复制未成功传输的文件,您可以考虑使用.< /p>

。该解决方案的唯一缺点是不能使用GSUTL并行化选项,并且文件将按顺序上传。

gsutil cp
如果操作成功,则返回0,否则返回非0值。我们可以在bash中使用
$$
操作符检查这个返回值

假设sending.csv中每行包含一个文件:

#!/bin/sh
while read line
do 
   echo $line; 
   gsutil cp $line gs://my-bucket/
   if [ $? -eq 0 ]
   then
       echo "$line successfully uploaded"
   else
       echo "Houston, we have a problem"
   fi 
done < files.csv
#/垃圾箱/垃圾箱
读行时
做
回声线;
gsutil cp$line gs://我的桶/
如果[$?-等式0]
然后
echo“$line已成功上载”
其他的
echo“休斯顿,我们有问题”
fi
完成
此解决方案的唯一缺点是,您不能将并行化选项与gsutil一起使用,文件将按顺序上载

gsutil cp
如果操作成功,则返回0,否则返回非0值。我们可以在bash中使用
$$
操作符检查这个返回值

假设sending.csv中每行包含一个文件:

#!/bin/sh
while read line
do 
   echo $line; 
   gsutil cp $line gs://my-bucket/
   if [ $? -eq 0 ]
   then
       echo "$line successfully uploaded"
   else
       echo "Houston, we have a problem"
   fi 
done < files.csv
#/垃圾箱/垃圾箱
读行时
做
回声线;
gsutil cp$line gs://我的桶/
如果[$?-等式0]
然后
echo“$line已成功上载”
其他的
echo“休斯顿,我们有问题”
fi
完成