这是 bash 中的一个脚本,它将文件从一个目录复制到另一个目录,但子目录中可能会有重复文件。因此,在复制时,它应该识别另一个文件是否具有相同的名称,如果是,则更改正在复制的文件的名称。我试过这个
for i in $1; do
find $i -type f -name img*.jpg -exec cp {} $2 \;
for j in $2; do
find $j -type f -name $i | while read filename; do if test "$i"="$j"; then mv $i new_filename; fi done
done
done
但是我收到一条错误消息,说文件名不应包含斜杠,这有点奇怪...我是一个完全的初学者,如果您输入任何代码,请发表评论。谢谢。
答案1
你$1
应该是一个目录列表,因为它是 find 之后的第一个参数。好吗?
在第一个 find 中,你必须引用星号:-name 'img*.jpg'
然后你复制到目录 $2
。因此,$2
第二个 for 是一个目录,而且只有一个。
如果您的目的是查看每个文件在中$2
,使用for j in $2/*
然后,find $2 -type f -name $i | while
...
顺便说一句,如果名称可能包含空格,请在参数周围使用双引号。