首页 > 其他分享 >文件批量拷贝的脚本(尤其适用于大小写敏感向不敏感的磁盘拷贝时发生冲突的情形)

文件批量拷贝的脚本(尤其适用于大小写敏感向不敏感的磁盘拷贝时发生冲突的情形)

时间:2024-01-08 19:33:07浏览次数:28  
标签:cp exFAT 敏感 大小写 file 拷贝 文件批量 dir

在Linux系统下,NTFS可以支持文件名大小写区分;但在MaxOS的exFAT格式中,则无法区分大小写。

当从NTFS向exFAT拷贝文件时,当同一个目录下而在文件名相同但大小写不同的两个及以上文件时,向exFAT写入会中断,使得文件拷贝操作无法完成。

因此,特别编写了下面这个脚本,用来解决这个问题。

它可以实现的功能包括:

(1)递归操作,只需要指定外部的文件路径即可;

(2)文件路径不变,有空格也会保留;

(3)如果遇到同名文件,会在文件名最后加1-10之间的数字(最大编号到10),后缀不变;

(4)如果文件名含有空格,会统一替换成下划线。

脚本文件 cp_dir.sh 的内容如下:

#! /bin/bash
# automatically copy files, and rename the file with case-nonsensitive environment under exFAT.
# edited by She, 2024-01-08
# function cp_dir() { echo $1 $2 cur_dir="$1" for file in $(ls "$1" | tr " " "\?"); do echo file here: ${file} # filenew=`tr "\?" "_" <<<${file}` file=`tr "\?" " " <<<$file` filenew=$file if [ -d "$1"/"${file}" ]; then echo cp_dir "$1"/"${file}" echo mkdir -p "$2"/"${filenew}" mkdir -p "$2"/"${file}" cp_dir "$1"/"${file}" "$2"/"${filenew}" else echo "is file: " "$1"/"${file}" if [ ! -f "$2"/"${file}" ]; then echo "copy file one by one: " "$1"/"${file}" " --> " "$2"/"${filenew}" cp "$1"/"${file}" "$2"/"${filenew}" else # duplicate file, need to add the i-th before the appendicy. prefix=${file%.*} prefix=`tr " " "_" <<<${prefix}` app=${file##*.} for i in $(seq 1 10 1 ) do echo "i: " $i filenew=${prefix}${i}.${app} if [ ! -f "$2"/"${filenew}" ]; then echo "copy duplicate file: " "$1"/"${file}" "$2"/"${filenew}" cp "$1"/"${file}" "$2"/"${filenew}" break; else echo "skip the existed filename: " "$2"/"${filenew}" fi done fi fi done } cp_dir "$1" "$2" #SrcPath=$HOME/Downloads #DesPath=$HOME/Test2024 # cp_dir $SrcPath $DesPath

 

在终端运行命令:

chmod a+x ./cp_dir.sh

SrcPath=$HOME/Downloads
DesPath=$HOME/Test2024
cp_dir $SrcPath $DesPath

 

标签:cp,exFAT,敏感,大小写,file,拷贝,文件批量,dir
From: https://www.cnblogs.com/snake553/p/17953093

相关文章

  • 【C++】STL 容器 - STL 容器的值语意 ( 容器存储任意类型元素原理 | STL 容器元素可拷
    文章目录一、STL容器的值(Value)语意1、STL容器存储任意类型元素原理2、STL容器元素可拷贝原理3、STL容器元素类型需要满足的要求4、STL容器迭代器遍历二、代码示例-自定义可存放入STL容器的元素类1、代码示例2、执行结果一、STL容器的值(Value)语意1、STL......
  • Python - 列表切片 与 深拷贝、浅拷贝
    1.列表list常用的方法:lst=[1,2,3]#append(new_item)方法相当于在列表末尾追加一个元素,相当于lst[len:]=new_itemlst.append(4)print(lst)#extend(iterable)方法,将iterable中的每个元素逐个添加到列表中,#相当于lst[len:len+len(iterable)]=iterablelst.e......
  • html5实现文件批量上传组件
    一、概述在html5中,相对于之前添加了不少新的元素和属性,在javascript中也添加了一些新的API,这些给我们的开发带来了很多便利。但由于各浏览器的发展步骤不一致,也导致了不同浏览器对html5支持的差异性。 二、实现原理1.在该html5实现的文件批量上传组件中,我们主要是利用html5中的一......
  • 拷贝文件到ubuntu服务器
    连接硬盘到Ubuntu服务器,用sudofdisk-l查看连接情况,如果没有显示出设备,那么换一个端口(USB口)试试挂载硬盘sudomkdirusbsudomount/dev/sdc2/home/usb查看当前所处目录的整个大小du-sh查看磁盘空间使用情况sudodf-h拷贝目录(包括子目录)文件到指定文件夹下  cd......
  • MySQL 8 剪切或拷贝用户创建语句
    有时,查看用户创建语句并将其复制到另一个数据库会很方便。比如在MySQL7中:mysql>showcreateusermytest@'%'\G***************************1.row***************************CREATEUSERformytest@%:CREATEUSER'mytest'@'%'IDENTIFIEDWITH'mys......
  • MATLAB 实现sobol参数敏感性分析
    1%sobol参数敏感性分析2%参考:3%csdn:https://blog.csdn.net/xiaosebi1111/article/details/465174094%wiki:https://en.wikipedia.org/wiki/Variance-based_sensitivity_analysis5%运行环境matlab2016b6%作者[email protected]年6月7日7%%初始......
  • 文件批量重命名之在线版本-前端的本地文件操作
    批量文件重命名是一个低频但时不时又会遇到的需求,非常适合在线工具的形式,即用即走。搜索了一圈,没有发现可以直接实现这个功能的网站,不过找到了相关的APIFileSystemFileHandle.move()forlocalfiles-ChromePlatformStatusChrome于111版本(2023年3月)添加了move这个A......
  • postgresql数据库迁移(拷贝数据库文件方式迁移)
    旧机器A:1、找到postgresql的data目录2、停止postgresql数据库3、执行tar-zcvfdatabak.tar.gzdata/新机器B:tar-zxvf databak.tar.gz-C/usr/local/postgres/使用scp或是ftp,或是移动硬盘将压缩文件放到新机器B上,前提条件是B机器要装有新的postgresql数据库,先停止数据库,然后找......
  • java浅拷贝BeanUtils.copyProperties引发的RPC异常 | 京东物流技术团队
    背景近期参与了一个攻坚项目,前期因为其他流程原因,测试时间已经耽搁了好几天了,本以为已经解决了卡点,后续流程应该顺顺利利的,没想到人在地铁上,bug从咚咚来~没有任何修改的服务接口,抛出异常:java.lang.ClassCastException:java.util.HashMapcannotbecasttocn.xxx.xxx.xxx.xxx.Ba......
  • java浅拷贝BeanUtils.copyProperties引发的RPC异常 | 京东物流技术团队
    背景近期参与了一个攻坚项目,前期因为其他流程原因,测试时间已经耽搁了好几天了,本以为已经解决了卡点,后续流程应该顺顺利利的,没想到人在地铁上,bug从咚咚来~没有任何修改的服务接口,抛出异常:java.lang.ClassCastException:java.util.HashMapcannotbecasttocn.xxx.xxx.xxx.xx......