假如现在我有一个文本,内容如下 /home/fdfs_storage/data/1C/4B/wKgBc2ASh2OAbwzlAAXW0XxiphE875.jpg /home/fdfs_storage/data/1C/4B/wKgBc2ASiF2AdqCtAAWrBVo-g9Y740.jpg /home/fdfs_storage/data/1C/4B/wKgBcmASiKCAZ5VIAAWWRheIptg999.jpg /home/fdfs_storage/data/1C/4B/wKgBcmASiLWAFFbOAAV4ojTPiZs627.jpg
...
我想把这些文件提取,并且包括文件夹,比如把 /home/fdfs_storage/data/1C/4B/wKgBc2ASh2OAbwzlAAXW0XxiphE875.jpg 复制到 /databak/1C/4B/wKgBc2ASh2OAbwzlAAXW0XxiphE875.jpg 就是 data 后面那部分都要,有什么好的方法吗
1
rrfeng 2021-02-22 11:14:43 +08:00
sed 's@/home/fdfs_storage/data/@/databak/@'
|
2
rrfeng 2021-02-22 11:15:37 +08:00
看起来要复制文件,直接 mv/cp/rsync 不好嘛
rsynv -a /home/fdfs_storage/data/ /databak/ |
3
Usaki OP 或者说怎么把内容替换成:
cp -r /home/fdfs_storage/data/1C/4B/wKgBc2ASh2OAbwzlAAXW0XxiphE875.jpg /databak/1C/4B/wKgBc2ASh2OAbwzlAAXW0XxiphE875.jpg |
5
Usaki OP @rrfeng /home/fdfs_storage/data/1C/4B 下面是有很多图片的,我只需要其中几张,每个 /data/XX/XX 下面都有个别图片要提取
|
6
axeprpr1 2021-02-22 11:23:44 +08:00
ls /home/fdfs_storage/data/* | xargs -I {} echo cp -r /home/fdfs_storage/data/{} /databak/{}
|
8
Usaki OP #!/bin/bash
TXT=`cat /home/fdfs_storage/1.txt` for FILE in $TXT;do A=`grep $FILE 1.txt | awk -F '/' '{print $4}'` B=`grep $FILE 1.txt | awk -F '/' '{print $5}'` C=`grep $FILE 1.txt | awk -F '/' '{print $6}'` mkdir -p /$A/$B/$C cp $FILE "/$A/$B/$C" done 搞定了 |
9
squarer 2021-02-22 16:22:33 +08:00
不是说好的 sed 问题吗?那就用 sed 实现 [手动滑稽]
你之前的需求,用 sed 实现的话就这样: cat 1.txt | sed 's#data.*#& /databak/&#;s#databak/data#databak#;s/^/cp -r /' > 2.txt 但实际还需要创建目录所以应该这样: cat 1.txt | sed 's#.*data#/databak#;s#.*/#&+++#;s#+++.*##;s/^/mkdir -p /' > 2.sh cat 1.txt | sed 's#data.*#& /databak/&#;s#databak/data#databak#;s/^/cp -r /' >> 2.sh 然后执行 2.sh 就能备份你的文件 sh 2.sh |
10
squarer 2021-02-22 17:16:13 +08:00
其实实现起来也有其他简单的方法,cp 有个参数是带原始目录拷贝的,拷贝完了,再移到你要的目录并删除无用的目录即可
代码粘不上来,触发了 v2 的规则:创建新回复过程中遇到一些问题: 请不要在每一个回复中都包括外链,这看起来像是在 spamming |
12
Jirajine 2021-02-22 17:22:16 +08:00 via Android
其实有你发帖的时间用一个你擅长的脚本语言早就写完了。
|
13
squarer 2021-02-22 17:24:52 +08:00
cat 1.txt | sed 's#$# /databak/#;s/^/cp --p 删除我 arents /'
|
14
squarer 2021-02-22 17:27:02 +08:00
mkdir /databak
执行刚生成的脚本 mv /databak/home/fdfs_storage/data/* /databak rm -R /databak/home |
15
squarer 2021-02-22 17:30:03 +08:00
迷之判断规则,发好多次都不行
|