我有3个名为 FOLDER1 , FOLDER2 , FOLDER3 的文件夹,我在这些文件夹中有几个文件,如明智的 file1 .txt , file2.txt , file3.txt ....等(在这3个文件夹中没有子文件夹)。
在这些文件夹中,某些文件是重复的。
FOLDER1
有file1.txt
,FOLDER2
也有file1.txt
OR
FOLDER2
有file1.txt
而FOLDER3
有file1.txt
OR
FOLDER1
有file1.txt
而FOLDER3
有file 1.txt
。
需要将另一个文件夹中的另一个重复file1.txt
重命名为file1DUPLICATE.txt
。
假设FOLDER1
和FOLDER2
有file1.txt
,我需要将file1.txt
中的FOLDER1
重命名为file1DUPLICATE.txt
并保留{ {1}}中{1}}为原始版本。
如果file1.txt
和FOLDER2
发生重复,我只需要在FOLDER1
重命名。
如果FOLDER2
和FOLDER1
中出现重复,我只需要在FOLDER2
重命名。
如果FODLER3
和FOLDER3
中出现重复,我可以重命名FOLDER1
我想要的文件夹。
任何人都有为此实现脚本的想法吗?
答案 0 :(得分:0)
你没有太多努力让我们帮你解决这个问题。但是因为我正在学习bash脚本,所以我把你的问题当作练习。
所以......这是一个重命名重复文件的bash脚本。
/!\重命名的文件将位于第一个参数的文件夹中。因此,在您的情况下,您必须像这样启动它:
重命名folder1和folder2中的重复文件:
$ mv_duplicates_script.sh /path/to/FOLDER1 /path/to/FOLDER2
重命名folder1和folder3中的重复文件:
$ mv_duplicates_script.sh /path/to/FOLDER1 /path/to/FOLDER3
重命名folder3和folder2中的重复文件:
$ mv_duplicates_script.sh /path/to/FOLDER3 /path/to/FOLDER2
请注意,您必须在重命名的文件的最后一个参数中设置FOLDER2转到FOLDER3。
#!/bin/bash
# if missing args, print Usage
##############################
if [[ -z $1 ]] || [[ -z $2 ]]
then
echo "Usage : `basename $0` /absolute/path/to/folder1 /absolute/path/to/folder2"
# exit with failed status
exit 1
fi
# test if folders exist
#######################
if [[ ! -d $1 ]]
then
echo "ERROR : Folder $1 not found..."
exit 1
fi
if [[ ! -d $2 ]]
then
echo "ERROR : Folder $2 not found..."
exit 1
fi
# get filenames from folder 1
#############################
cd $1
i=0
for f in *.txt
do
folder1_files[$i]=$f
((i++))
done
# get filenames from folder 2
#############################
cd $2
i=0
for f in *.txt
do
folder2_files[$i]=$f
((i++))
done
# compare and move duplicates
#############################
for f in ${folder1_files[@]}
do
for g in ${folder2_files[@]}
do
if [[ $f == $g ]]
then
echo "Duplicate file : $g"
echo "Renaiming to DUPLICATE_$g in $1"
mv $1/$g $1/DUPLICATE_$g
fi
done
done
exit 0
将其用作:
<强> $ mv_duplicates_script.sh /absolute/path/to/folder1 /absolute/path/to/folder2
强>
希望它有所帮助。
PS:这肯定可以改进,欢迎您提出意见/建议。