我有两个文件名相似但扩展名不同的目录。下面是一个例子:
DIR1:
- IN89284.wav
- OUT9920.wav
DIR2:
- IN89284.mp3
- OUT9920.mp3
Run Code Online (Sandbox Code Playgroud)
我想比较这些目录但忽略文件扩展名,因此在这种情况下它们将相同。我怎样才能做到这一点?我想我必须遍历第一个目录,修剪每个文件名(剪切扩展名),然后在第二个目录中搜索它。有没有更好的方法来做到这一点?
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)
和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
获取根名称(删除扩展名)。
使用通配符可以保证一致的排序顺序。
(假设文件名没有换行符)。