【发布时间】:2016-03-11 09:27:49
【问题描述】:
我想将分散在不同目录中的文件复制到一个目录中。
find . -name "*.off" > offFile
while read line; do
cp "${line}" offModels #offModels is the destination directory
done < offFile
虽然文件offFile 有1831 行,但cd offModels 和ls | wc -l 给出1827。我认为四个以“.off”结尾的文件不会被复制。
起初,我认为由于我在 shell 脚本中使用了双引号,因此可能会遗漏名称中包含 dollor 符号、反引号或反斜杠的文件。然后我找到一个名为 $.... 的文件。但是如何找到另外三个?在cd offModels和ls > ../File之后,我写了一个这样的python脚本:
fname1="offFile" #records files scattered
with open(fname1) as f1:
contents1=f1.readlines()
fname2="File"
with open(fname2) as f2:
contents2=f2.readlines()
visited=[0]*len(contents1)
for substr in contents2:
substr="/"+substr
for i, string in enumerate(contents1):
if string.find(substr)>=0:
visited[i]=1
break
for i,j in enumerate(visited):
if j==0:
print contents1[i]
输出给出了四行,但它们是错误的。但是我可以在目标目录中找到所有四个文件。
编辑
正如评论和答案所指出的,有四个文件与其他四个名称重复。我现在感兴趣的一件事是,使用我使用的 bash 脚本,复制了名称为 $CROSS.off 的文件。这真的让我很吃惊。
【问题讨论】:
-
也许你有文件名重复。