比较两个文件夹找出不同的文件,并按路径复制到另外一个文件夹(shell练习记录1)

本文介绍了一个用于在Linux环境下比较并拷贝两个不同路径下文件的Bash脚本。该脚本能够识别两个目录间的差异,将第一个目录中独有的文件按完整路径拷贝至指定结果目录,并记录相同及差异文件的详细信息。

本文记录下,曾经使用的sh脚本之一,时间太久忘完了,记录下。

#!/bin/bash

#
#example to use this script.
#source to_find_prop_files.sh ~/workspace/org_source_code/out ~/workspace/tsrc_code/out~/workspace/to_vrz_src_code/out
#arg1's src is contain main files more libs
#arg2's src is not contain vendor path.
#the result path is current path
#功能:比较参数1,2两个路径中到文件,把参数1路径多出到文件,按完整路径,拷贝到result目录下
#

dir="result"
dir1=$1
dir2=$2

if [ -e $dir ]; then
	rm -rf $dir
	echo "remove old result and create newer!"
	mkdir $dir
	touch $dir/same_path.log
	touch $dir/props_files.log
else
	echo "create result path!"
	mkdir $dir
	touch $dir/same_path.log
	touch $dir/props_files.log
fi

function find_props(){
	for element in `ls $1`
		do
			dir1_or_file=$1"/"$element
			if [ -d $dir1_or_file ]; then
				dir2_or_file=$2"/"$element
				if [ -e $dir2_or_file ]; then
					find_props $dir1_or_file $dir2_or_file
				else
					sub_path=$dir"/"$2
					mkdir -p $sub_path
					cp -rf $dir1_or_file $sub_path
					echo "$dir1_or_file" >> $dir/props_files.log
				fi
			else
				file2=$2"/"$element
				if [ -e $file2 ]; then
					echo "$file2" >> $dir/same_path.log
				else
					sub_path=$dir"/"$2
					mkdir -p $sub_path
					cp -rf $dir1_or_file $sub_path
					echo "$dir1_or_file" >> $dir/props_files.log
					echo "copy new files please wait..."
				fi
			fi
		done

}

find_props $dir1 $dir2

保存为.sh即可。在linux系统下使用。

<think>好的,用户需要一条shell命令,将两个文件夹里的文件复制到一个文件夹。首先,我需要确定用户使用的操作系统,但通常shell命令在Unix-like系统中通用,所以假设是Linux或macOS。 接下来,要确保用户想复制的是两个不同文件夹中的文件,而不是文件夹本身。因此,命令应该复制文件夹内的内容,而不是整个文件夹。可能需要使用cp命令,结合通配符或者递归选项。 考虑到可能需要保留文件属性,比如权限、时间戳等,应该包含-r参数进行递归复制。不过如果用户只是想复制文件而不包括子目录,可能不需要-r,但通常复制整个内容更常见。 然后,目标文件夹需要先存在吗?用户可能希望命令自动创建目标文件夹,所以需要先使用mkdir来创建。如果目标文件夹已经存在,mkdir可能会报错,但加上-p参数可以避免,因为-p会检查路径是否存在,不存在才创建,存在也不会报错。 所以,完整的命令结构应该是先创建目标文件夹,然后分别复制两个文件夹的内容到目标文件夹。例如: mkdir -p 新文件夹路径 cp -r 源文件夹1/* 新文件夹路径/ cp -r 源文件夹2/* 新文件夹路径/ 或者,用户可能希望更简洁,将两个源合一个命令中,比如使用通配符,但路径可能不同,所以分开两条cp命令更可靠。 另外,需要注意通配符*是否会复制隐藏文件。通常,*不会匹配以点开头的文件,所以可能需要额外的命令来处理隐藏文件,比如shopt -s dotglob,但用户可能不需要,或者可以手动添加。但用户的问题没有特别提到,可能暂时忽略。 最后,给出示例命令,提醒用户替换路径,可能还要注意权限问题,比如使用sudo如果需要的话。但一般情况不需要,除非权限不足。 总结回答应该是: mkdir -p /path/to/destination cp -r /path/to/source1/* /path/to/destination/ cp -r /path/to/source2/* /path/to/destination/ 然后相关问题可能包括如何合时排除某些文件、如何覆盖时询问、如何复制目录结构等。 </think>可以使用以下命令将两个文件夹内的文件复制到文件夹: ```bash mkdir -p /目标路径 && cp -r /源路径1/* /源路径2/* /目标路径/ ``` 示例: ```bash mkdir -p ~/Documents/merged_files && cp -r ~/Downloads/folder1/* ~/Downloads/folder2/* ~/Documents/merged_files/ ``` 注意: 1. `-p` 参数会保留文件属性自动创建路径 2. `&&` 表示前一个命令成功后再执行下一个命令 3. 通配符 `*` 会匹配所有非隐藏文件
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值