下面是我自己写的一条指令:
find ~/Music/Nightwish\ wish/ -name *.jpg -exec cp {} ~/Desktop \;
但是它用新的文件覆盖了所有的同名文件了,我想通过设定一个变量做文件名 ,每执行一次自增一,但不知道该怎么在同一条指令里实现自增和复制,求助。
还有一点上面的指令中{}符号有哪些用法?
15 个解决方案
#1
我不是达人……
#2
这个不好做,不知道多个子目录中有相同的文件名的,到底哪个先拷贝到桌面呢?
这个shell还是写个脚本文件,长一点,对每个目录递归ls *.jpg,for循环把ls的结果cp到桌面,cp之前先判断桌面是否有该文件名了吗。 这样写出来的shell脚本估计比较长。
还是期待高手吧。另,可以去linux版问。
这个shell还是写个脚本文件,长一点,对每个目录递归ls *.jpg,for循环把ls的结果cp到桌面,cp之前先判断桌面是否有该文件名了吗。 这样写出来的shell脚本估计比较长。
还是期待高手吧。另,可以去linux版问。
#3
#4
哦,我还不知道有一个Linux得板块,我一直都觉得c语言板块卧虎藏龙,有无数的万能的人才
#5
LZ指的不要覆盖是什么意思? 就是从新命名呗? 那就做个从命判断,然后+1的从新命名就可以了啊
#6
对对,求给出代码
#7
复制前判断下桌面是否已经有了和该文件同名的文件?
#8
INDEX=0; for AA in `find ~/Music/Nightwish\ wish/ -name *.jpg` ; do INDEX=`expr $INDEX + 1` ; cp $AA ~/Desktop/$INDEX.jpg
#9
这样可以不....
INDEX=0; for AA in `find ~/Music/Nightwish\ wish/ -name *.jpg` ; do INDEX=`expr $INDEX + 1` ; cp $AA ~/Desktop/$INDEX.jpg ; done
INDEX=0; for AA in `find ~/Music/Nightwish\ wish/ -name *.jpg` ; do INDEX=`expr $INDEX + 1` ; cp $AA ~/Desktop/$INDEX.jpg ; done
#10
比如下面的脚本可以列出所有的文件名赋给filename变量,以\t隔开
假设现在有个文件名a.txt,那么从上面的变量中找这个变量名就可以判断是否存在该文件,或者可以用awk的正则表达式来匹配
filename=`ls |awk '{print "\t" $1}'`
假设现在有个文件名a.txt,那么从上面的变量中找这个变量名就可以判断是否存在该文件,或者可以用awk的正则表达式来匹配
#11
任务:把一个文件夹下子目录中所有的jpg文件拷到桌面,文件名相同的不要覆盖。
#!/bin/sh
for i in .; do
echo "cp $i"
if [ -e ~/Desktop/$i ]; then
continue;
fi;
cp $i ~/Desktop/;
done
#12
呵呵,饭要一口一口吃,事情要一步一步来。
首先,不要调用系统的 cp 命令,换成你自己写的 CopyFile 命令:
find ~/Music/Nightwish\ wish/ -name *.jpg -exec CopyFile {} ~/Desktop \;
然后,在你自己写的 CopyFile 命令里,
1 生成带路径的目标文件名
2 测试目标文件是否存在
2.1 文件存在就在文件名上增加一个数字,转第二步
3 第二步保证了目标文件不存在,那么就用 cp 完成拷贝
首先,不要调用系统的 cp 命令,换成你自己写的 CopyFile 命令:
find ~/Music/Nightwish\ wish/ -name *.jpg -exec CopyFile {} ~/Desktop \;
然后,在你自己写的 CopyFile 命令里,
1 生成带路径的目标文件名
2 测试目标文件是否存在
2.1 文件存在就在文件名上增加一个数字,转第二步
3 第二步保证了目标文件不存在,那么就用 cp 完成拷贝
#13
这个不错!
呵呵楼主的问题是在windows上的,答案都有linux上的了呵呵
#14
这个不可以,应为我的路径里面有空格,这样就会错误了。
#15
自己写copy阿,这个好主意呀。有空试试看
#1
我不是达人……
#2
这个不好做,不知道多个子目录中有相同的文件名的,到底哪个先拷贝到桌面呢?
这个shell还是写个脚本文件,长一点,对每个目录递归ls *.jpg,for循环把ls的结果cp到桌面,cp之前先判断桌面是否有该文件名了吗。 这样写出来的shell脚本估计比较长。
还是期待高手吧。另,可以去linux版问。
这个shell还是写个脚本文件,长一点,对每个目录递归ls *.jpg,for循环把ls的结果cp到桌面,cp之前先判断桌面是否有该文件名了吗。 这样写出来的shell脚本估计比较长。
还是期待高手吧。另,可以去linux版问。
#3
#4
哦,我还不知道有一个Linux得板块,我一直都觉得c语言板块卧虎藏龙,有无数的万能的人才
#5
LZ指的不要覆盖是什么意思? 就是从新命名呗? 那就做个从命判断,然后+1的从新命名就可以了啊
#6
对对,求给出代码
#7
复制前判断下桌面是否已经有了和该文件同名的文件?
#8
INDEX=0; for AA in `find ~/Music/Nightwish\ wish/ -name *.jpg` ; do INDEX=`expr $INDEX + 1` ; cp $AA ~/Desktop/$INDEX.jpg
#9
这样可以不....
INDEX=0; for AA in `find ~/Music/Nightwish\ wish/ -name *.jpg` ; do INDEX=`expr $INDEX + 1` ; cp $AA ~/Desktop/$INDEX.jpg ; done
INDEX=0; for AA in `find ~/Music/Nightwish\ wish/ -name *.jpg` ; do INDEX=`expr $INDEX + 1` ; cp $AA ~/Desktop/$INDEX.jpg ; done
#10
比如下面的脚本可以列出所有的文件名赋给filename变量,以\t隔开
假设现在有个文件名a.txt,那么从上面的变量中找这个变量名就可以判断是否存在该文件,或者可以用awk的正则表达式来匹配
filename=`ls |awk '{print "\t" $1}'`
假设现在有个文件名a.txt,那么从上面的变量中找这个变量名就可以判断是否存在该文件,或者可以用awk的正则表达式来匹配
#11
任务:把一个文件夹下子目录中所有的jpg文件拷到桌面,文件名相同的不要覆盖。
#!/bin/sh
for i in .; do
echo "cp $i"
if [ -e ~/Desktop/$i ]; then
continue;
fi;
cp $i ~/Desktop/;
done
#12
呵呵,饭要一口一口吃,事情要一步一步来。
首先,不要调用系统的 cp 命令,换成你自己写的 CopyFile 命令:
find ~/Music/Nightwish\ wish/ -name *.jpg -exec CopyFile {} ~/Desktop \;
然后,在你自己写的 CopyFile 命令里,
1 生成带路径的目标文件名
2 测试目标文件是否存在
2.1 文件存在就在文件名上增加一个数字,转第二步
3 第二步保证了目标文件不存在,那么就用 cp 完成拷贝
首先,不要调用系统的 cp 命令,换成你自己写的 CopyFile 命令:
find ~/Music/Nightwish\ wish/ -name *.jpg -exec CopyFile {} ~/Desktop \;
然后,在你自己写的 CopyFile 命令里,
1 生成带路径的目标文件名
2 测试目标文件是否存在
2.1 文件存在就在文件名上增加一个数字,转第二步
3 第二步保证了目标文件不存在,那么就用 cp 完成拷贝
#13
这个不错!
呵呵楼主的问题是在windows上的,答案都有linux上的了呵呵
#14
这个不可以,应为我的路径里面有空格,这样就会错误了。
#15
自己写copy阿,这个好主意呀。有空试试看