区分两个目录,但忽略扩展名

use*_*731 8 diff filenames

我有两个文件名相似但扩展名不同的目录。下面是一个例子:

DIR1:
 - IN89284.wav
 - OUT9920.wav

DIR2:
 - IN89284.mp3
 - OUT9920.mp3
Run Code Online (Sandbox Code Playgroud)

我想比较这些目录但忽略文件扩展名,因此在这种情况下它们将相同。我怎样才能做到这一点?我想我必须遍历第一个目录,修剪每个文件名(剪切扩展名),然后在第二个目录中搜索它。有没有更好的方法来做到这一点?

lfm*_*noz 5

diff  <(ls -1 ./dir1 | sed s/.wav//g) <( ls -1 ./dir2 | sed s/.mp3//g) 
Run Code Online (Sandbox Code Playgroud)

列出目录并将每个文件放在单独的行上

   ls -1 
Run Code Online (Sandbox Code Playgroud)

删除文件扩展名

    sed s/.wav//g
Run Code Online (Sandbox Code Playgroud)

  • 不太神秘。如果有人想要更通用的解决方案,则可以使用 `diff &lt;(ls -1 ./dir1 | sed 's/\.[az]*$//g') &lt;( ls -1 ./dir2 | sed 's/ \.[az]*$//g')` (3认同)

Sté*_*las 4

zsh

diff -u <(cd dir1 && printf '%s\n' **/*(D:r)) \
        <(cd dir2 && printf '%s\n' **/*(D:r))
Run Code Online (Sandbox Code Playgroud)

(D)包含点文件(隐藏文件),:r获取根名称(删除扩展名)。

使用通配符可以保证一致的排序顺序。

(假设文件名没有换行符)。