列出前16个字符相同的文件

时间:2011-08-14 16:54:20

标签: bash unix shell

我想编写一个可以在目录中运行的bash脚本,它将执行以下操作:

  • 浏览所有子目录(递归)
  • 如果在同一个给定子目录中有两个文件,其文件名具有相同的前16个字符(例如“YourTestFileNameHey.jpg”和“YourTestFileNameFoo.png”),则输出其文件名(或移动)其中一个到另一个地方)。

有谁知道怎么做?

2 个答案:

答案 0 :(得分:2)

为了一项复杂的任务,请帮助自己并使用除了bash之外的其他东西。我自己的第一选择是Perl,但是如果你知道任何通用编程语言,它将比纯shell更容易和更易于维护。

答案 1 :(得分:1)

我不知道这是否能为您完成这项工作,但您可以根据以下脚本做好准备:

#!/bin/bash
cd "$1"
for i in *; do j=`echo $i | cut -c 1-16`; echo $1/$i\|$j;done | awk -F\| 'seen[$
2]++ == 1 { printf("echo \"%s\"", $1) | "sh" }'

它将列出与同一目录中的另一个文件具有相同前16个字符的每个第二个文件。您可以通过mv命令轻松替换printf中的echo命令(“echo \”%s \“”,$ 1)。

现在,如果你想在特定目录下的所有子目录中使用这个脚本,让我们称它为mydir,你可以用这样的find命令来做,假设你将上面的脚本保存在一个名为myscript的文件中,它位于与mydir相同的目录:

find mydir -type d -exec ./myscript {} \;

这有帮助吗?