在另一个文件夹中搜索与另一个文件名匹配的文件

在另一个文件夹中搜索与另一个文件名匹配的文件

我文件夹中有一些文件,它们被命名为***_code_c****(其中*代表任何字母或数字)。我还有另一个文件夹,里面有许多文件、文件夹和子文件夹。我想要做的是查找并复制到另一个位置的任何与这些文件的名称匹配的文件,***_code_c****但只有两个字母不同,例如和***_mode_m****,并且***_kode_c****任何符合此条件的文件都将被复制到特定文件夹中,其中带有 的文件mode将被放置在一个文件夹中,而带有code的文件将被放置在另一个文件夹中。如果有人可以告知如何做到这一点。谢谢kodecode

举例说明需要做什么:

FolderAABC_code_c001里面有一些文件,比如说CDE_code_c002FGH_code_c003 ...

另一个FolderB里面有许多文件、文件夹和子文件夹。

对于 中的每个文件,FolderA都有 对应的两个文件,其中FolderB除中间部分外,名称完全相同。例如 对应的两个文件是ABC_code_c001ABC_kode_c001ABC_mode_m001而 对应的文件FGH_code_c003将是FGH_kode_c003FGH_mode_m003等等

所以,我想要做的是获取每个文件FolderA并搜索两个相应的文件,然后将这两个文件中的每一个复制到FolderB另外两个文件夹中(每个文件夹中一个)。FolderCFolderD

c请注意,我使用的名称并不是我在示例中列出的确切名称,但它具有相同的想法,即它的名称与其他两个名称之间的差异是从到k和的中间一个字母m

答案1

假设您在 $HOME 中,并且您有四个目录 -- 文件夹 A 和文件夹 B,如您的问题中所述;文件夹 K,您要将“kode”文件移动到其中;文件夹 M,您要将“mode”文件夹移动到其中。以下应该可以实现这一点:

shopt -s globstar
cd /path/to/folderA
for f in *_code_c*; do
  mv /path/to/folderB/**/"${f/code/kode}" /path/to/folderK
  mv /path/to/folderB/**/"${f/code_c/mode_m}" /path/to/folderM
done

显然,首先要在一些虚拟数据上进行测试。

答案2

创建一个简单的文件copyFile.sh如下:

#!/bin/bash
kodeFile=$(basename $1 | sed -e 's/_code_c/_kode_c/')
modeFile=$(basename $1 | sed -e 's/_code_c/_mode_m/')
find FolderB -name "$modeFile" -exec cp {} FolderC/$modeFile \;
find FolderB -name "$kodeFile" -exec cp {} folderD/$kodeFile \;

保存它,例如在 /home/yourUser/bin 中。

更改权限为copyFile.sh

chmod +x /home/yourUser/bin/copyFile.sh

打开/home/yourUser/.bashrc文件并在末尾添加以下行:

PATH=$PATH:/home/yourUser/bin

保存并重新加载:

source .bashrc

现在您有了一个可以搜索文件并复制它们的新实用程序。

尝试这个:

find FolderA -name "*_code_c*" -exec copyFile.sh {} \;

在 lubuntu 12.04 上测试

答案3

我相信这正是您所描述的。

下面的脚本看起来有点冗长,但其中很大一部分是用户在这个有点复杂的构造中必须提供的必要信息。

如何使用

与往常一样,复制下面的脚本,输入适当的路径(在本例中是相当多的路径)、适当的标识字符串,然后将其保存为reorg.py

通过命令运行:

python3 /path/to/reorg.py

剧本

#!/usr/bin/env python3

import os
import shutil

# --------------------------------------------------------
# existing files directories
original_dir = "/path/to/original_files"
equals_dir = "/path/to/files_with_name_variants"
# original identifying string
id_string = "code" 
# variants + their desired destination
var_1 = "node"; vardir_1 = "/path/to/directory/where_first_variants_shouldbestored"
var_2 = "kode"; vardir_2 = "/path/to/directory/where_second_variants_shouldbestored"

# ---------------------------------------------------------

origs = []

for root, dirs, files in os.walk(original_dir):
    for name in files:
        if id_string in name:
            origs.append(name.replace(id_string, ""))

for root, dirs, files in os.walk(equals_dir):
    for name in files:
        if var_1 in name:
            if name.replace(var_1, "") in origs:
                shutil.copyfile(root+"/"+name, vardir_1+"/"+name)
        if var_2 in name:
            if name.replace(var_2, "") in origs:
                shutil.copyfile(root+"/"+name, vardir_2+"/"+name)

相关内容