求一段 shell 命令写法

2019-10-17 12:49:52 +08:00
 jamfer
父文件夹:father
子文件夹:61,62,63,64 (这部分省略了...),71,72
子文件夹里边包含了一堆图片,命名方式全部都是:1.jpg ,2.jpg ,3.jpg... 图片数量不固定

需求:把所有子文件夹里的图片都放到父文件夹里,并且按照 1.jpg ,2.jpg ,3.jpg... 的方式命名。
1506 次点击
所在节点    问与答
14 条回复
nybux
2019-10-17 13:13:48 +08:00
cd father && find | xarg -n 1 -I {} cp {} ..
jamfer
2019-10-17 13:17:29 +08:00
@nybux 提示 xarg: command not found 是什么原因
ik
2019-10-17 13:21:47 +08:00
xargs
yorks
2019-10-17 13:26:40 +08:00
cd father
for f in */*.jpg ; do echo $f; rsync -b $f .;done
jamfer
2019-10-17 13:42:24 +08:00
@yorks 新文件把旧文件覆盖了,可能需求没说清楚,最后生成的 1.jpg ,2.jpg ,3.jpg... 要按照文件夹的顺序顺延。

比如 61/ 里边是 1.jpg ,2.jpg ,3.jpg ,62/里边也是 1.jpg ,2.jpg ,3.jpg 最后生成的应该是 1.jpg ,2.jpg ,3.jpg ,4.jpg ,5.jpg ,6.jpg

或者能生成 61-1.jpg ,61-2.jpg ,61-3.jpg ,62-1.jpg ,62-2.jpg ,62-3.jpg 这样也行。
hugee
2019-10-17 13:50:53 +08:00
就十几个文件夹。用 tc 手动操作两步就完成了,还需要写什么脚本?
jamfer
2019-10-17 13:52:25 +08:00
@hugee 类似的文件夹有几百个
Chewbacca
2019-10-17 14:11:23 +08:00
cd father && find | rename "s#\./## && s#/#-#g unless -d"
jasonyang9
2019-10-17 14:11:36 +08:00
思路:递归列出所有子目录中的.jpg ,写到一个临时文件,用脚本移动每个文件到目标目录,同时重命名为 序号 或 行号 或 子目录名-序号 形式。。。
scukmh
2019-10-17 14:33:17 +08:00
cd father
for f in */*.jpg ; do echo $f;prefix=`echo $f | cut -d'/' -f1`;filename=`echo $f | cut -d'/' -f2`; echo $filename;newfilename=$prefix"-"$filename; echo $newfilename; cp $f $newfilename;done
wangweiggsn
2019-10-17 14:34:40 +08:00
windows 会,linux 不会,哈哈。
用 excel 辅助写代码也行,A 列写所有原来的文件名,B 列用公式加工成想要的文件名,A 列前插入一列写 move 或 ren 即可。
lululau
2019-10-17 14:41:22 +08:00
zsh: cd father && zmv '(*)/(*)' '../$1-$2'
jamfer
2019-10-17 14:46:40 +08:00
@scukmh
@lululau 感谢两位,搞定了
gshao666666
2019-10-18 17:05:15 +08:00
cd father && for i in */*.jpg;do cp $i `echo $i|awk -F/ '{print $1"-"$2}'`; done

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/610237

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX