【问题标题】:Rename Duplicate file name to another name in multiple folders [closed]将多个文件夹中的重复文件名重命名为另一个名称[关闭]
【发布时间】:2017-07-13 11:45:15
【问题描述】:

我有 3 个文件夹,分别命名为 FOLDER1FOLDER2FOLDER3,我在这些文件夹中有几个文件,例如 wise file1 .txtfile2.txtfile3.txt ....等(在这3个文件夹中没有子文件夹)。

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

FOLDER1file1.txtFOLDER2 也有file1.txt

FOLDER2file1.txtFOLDER3file1.txt

FOLDER1file1.txtFOLDER3file 1.txt

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

假设如果FOLDER1FOLDER2file1.txt,我需要将FOLDER1 中的file1.txt 重命名为file1DUPLICATE.txt,并将FOLDER2 中的file1.txt 保留为原始。

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

如果FOLDER2FODLER3出现重复,我只需要在FOLDER3重命名。

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

如果FOLDER1FOLDER3 出现重复,我可以将file.txt 重命名为我想要的任何文件夹。

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

【问题讨论】:

  • 如果您使用的是 php,请使用 scandir() 函数检查文件名
  • 缺少代码和您选择的标签数组表明您希望有人将完整的程序放在您的腿上。请参加 SO 的 tour 并学习 How to Ask 好问题,以了解为什么这个问题几乎肯定会被否决和关闭。
  • @phpjsnerd:如果您希望有人为您工作,请“路过”。这里不需要您的问题,因为如此多的反对票和接近票应该告诉您。
  • @phpjsnerd 恐怕您对 SO 工作原理的理解是错误的。有一套既定的规则和指导方针,每个人都应该遵守,当人们不遵守这些规则时,社区会以反对票和接近票作为回应。

标签: java php python bash perl


【解决方案1】:

您并没有付出太多努力让我们帮助您解决这个问题。但是由于我正在学习 bash 脚本,因此我将您的问题视为练习。

所以...这是一个重命名重复文件的 bash 脚本。

/!\ 重命名的文件将在第一个参数的文件夹中。所以,在你的情况下,你必须像这样启动它:

  • 重命名文件夹 1 和文件夹 2 中的重复文件:

    $ mv_duplicates_script.sh /path/to/FOLDER1 /path/to/FOLDER2

  • 重命名文件夹 1 和文件夹 3 中的重复文件:

    $ mv_duplicates_script.sh /path/to/FOLDER1 /path/to/FOLDER3

  • 重命名文件夹 3 和文件夹 2 中的重复文件:

    $ 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 : 这当然可以改进,欢迎您的 cmets/tips。

【讨论】:

    猜你喜欢
    • 2013-04-06
    • 1970-01-01
    • 2014-08-10
    • 2015-05-10
    • 2012-12-06
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多