Я хочу скопировать файлы, разбросанные в отдельных каталогах, в один каталог.bash: копировать файлы с тем же шаблоном
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» не копируется.
Во-первых, я думаю, что, поскольку я использую двойную кавычку в сценарии оболочки, файлы с именами, которые содержат знак Dollor, backtick или обратную косую черту, могут быть пропущены. Затем я нахожу один файл с именем $ .... Но как найти еще три? После cd offModels
и ls > ../File
, я пишу питон скрипт так:
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
копируется. Это меня действительно удивило.
Возможно, у вас есть файлы с дублируемым именем. – luoluo