将重复文件名重命名为多个文件夹中的另一个名称

时间:2017-02-23 06:02:44

标签: java php python bash perl

我有3个名为 FOLDER1 FOLDER2 FOLDER3 的文件夹,我在这些文件夹中有几个文件,如明智的 file1 .txt file2.txt file3.txt ....等(在这3个文件夹中没有子文件夹)。

在这些文件夹中,某些文件是重复的。

FOLDER1file1.txtFOLDER2也有file1.txt

OR

FOLDER2file1.txtFOLDER3file1.txt

OR

FOLDER1file1.txtFOLDER3file 1.txt

需要将另一个文件夹中的另一个重复file1.txt重命名为file1DUPLICATE.txt

假设FOLDER1FOLDER2file1.txt,我需要将file1.txt中的FOLDER1重命名为file1DUPLICATE.txt并保留{ {1}}中{1}}为原始版本。

如果file1.txtFOLDER2发生重复,我只需要在FOLDER1重命名。

如果FOLDER2FOLDER1中出现重复,我只需要在FOLDER2重命名。

我只是不想重命名FOLDER2中的文件

如果FODLER3FOLDER3中出现重复,我可以重命名FOLDER1我想要的文件夹。

任何人都有为此实现脚本的想法吗?

1 个答案:

答案 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:这肯定可以改进,欢迎您提出意见/建议。