Linux常用命令

Linux常用命令——批量复制与重命名

一、将val文件夹下的所有png图片复制到train文件夹下的同级目录下,因val和train中存在相同名字的图片,因此复制过去的同时为避免冲突需要对文件重命名,终端运行以下命令:

for F in val/*/*.png; do tmp=${F#val/}; cp -vf ${F} "train/"${tmp%.png}"_1.png"; done
  1. for F in val/*/*.png 遍历val及其子文件夹下的png文件,如val/0/0001.png
  2. tmp=${F#val/} 去掉字符串从左往右直到出现val/的地方(含val/),如0/0001.png,并赋值给变量tmp
  3. ${tmp%.png} 去掉字符串从右往左直到出现.png的地方(含.png),如0/0001
  4. cp -vf ${F} "train/"${tmp%.png}"_1.png"cp -vf val/0/0001.png train/0/0001_1.png

二、保留最近的1个文件,全部删除其余的文件:

rm `ls -t | tail -n +2`

三、服务器上运行tensorboard,在本地查看:
本地终端运行

ssh -L 16006:127.0.0.1:6006 username@server_ip -N -v -v

服务器上运行tensorboard:

tensorboard --logdir /your/log/dir --port 6006

本地浏览器浏览:http://localhost:16006/

四、linux硬盘挂载。一般移动硬盘在买回来之后,我们对其进行格式化,同时修改其名字为个性化名字。在linux系统上插入移动硬盘后,如何查看其名字并挂载呢?
查看名字(label):

ls -l /dev/disk/by-label

在这里插入图片描述
以ZJRR4为例,将其挂载到/media/user-name/ZJRR4下。

sudo mkdir /media/user-name/ZJRR4
sudo umount /dev/sdc1
sudo mount /dev/sdc1 /media/user-name/ZJRR4

五、拷贝文件夹下满足某一条件的文件到另一个文件夹,保持目录结构。如拷贝src下及其子文件下的所有jpg格式的图像到dst下,并保持目录结构:

  1. cd到src文件夹下
  2. 在dst下创建相同的目录结构:find . -type d -exec mkdir -p /dst/{} \;
  3. 拷贝。find . -type f -name "*.jpg" -exec cp {} /dst/{} \;

六、Linux用多了,经常遇到奇葩的逻辑需求,比如一个文件夹下有很多图像,按照一定的规则命名,如下所示,想统计这些图像总共有哪些前缀,使用命令:ls | tr '_' ' ' | awk '{print $1}' | sort -u将打印出现的所有前缀(不重复),如果要统计个数,命令最后再加上一个管道 wc -l
在这里插入图片描述
七、终于找到了一种方法,查找并删除损坏的图片。在做计算机视觉深度学习的模型训练时,大量图像copy的时候难免遇到损坏的图像却不容易察觉,结果模型训练到一半程序报错。假设要寻找并删除当前目录下损坏的图像。

  1. 查找所有jpg图像:find . -type f -name "*.jpg"
  2. 查看图像的详细信息:identify -verbose XXX,如果图像损坏,会报下图所示的错误。因grep无法捕获 stderr流中的信息,需要进行重定向,将 stderr 中的信息流定向到标准输出:identify -verbose XXX 2>&1
    在这里插入图片描述
  3. 正常的图片不会有 error输出,通过管道 grep 损坏图像: grep error
  4. 从报错信息中提取图片名:sed "s/.*\`\(.*\.jpg\)'.*/\1/g"
  5. 完整命令:find . -type f -name "*.jpg" -exec identify -verbose {} 2>&1 \; | grep error | sed "s/.*\`\(.*\.jpg\)'.*/\1/g" | xargs rm

八、拷贝文件到服务器,排除目录中的某些文件,拷贝过去之后保留原有的目录结构,可以使用 rsync 结合 --exclude 参数,rsync -av -e ssh --exclude="*.jpg" SOURCE_DIR USER_NAME@IP:DESTINATION_DIR但是如果要排除的文件数量非常多,如排除大量jpg图片,rsync 会非常慢。可结合 find 和 rsync 的 --files-from 参数使用。首先 cd 到 SOURCE_DIR 目录下,使用 find 生成想要拷贝的文件列表find . -type f ! -name '*.jpg' > to_copy_without_jpg.txt,然后 cd 到上一级目录,rsync -av -e ssh --files-from=SOURCE_DIR/to_copy_without_jpg.txt SOURCE_DIR USER_NAME@IP:DESTINATION_DIR即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值