bash 中匹配空格

发布于 2024-12-15 04:29:09 字数 88 浏览 2 评论 0原文

我想删除由itunes创建的重复文件,这些文件都以“1.mp3”结尾。我已经接近匹配,但我不知道如何匹配空间。有人可以编写一个命令来从当前目录递归删除这些文件吗?

I want to delete duplicate files made by itunes, which all end in " 1.mp3". I've come close to matching but I don't know how to match the space. Can somebody writeup a command to recursively delete those files from the current directory?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

追星践月 2024-12-22 04:29:09

您想要浏览 iTunes 收藏并删除 Nickelback 的 If I care 1.mp3,但前提是 Nickelback 原始 MP3 If I care.mp3 仍然存在。正确的?

嘿,你的音乐品味取决于你...

这应该可以解决问题:

find -name "* 1.mp3" | while read file
do
   if [ -e "${file% 1.mp3}.mp3" ]
   then
       rm $file
   fi
done

我找到所有重复项(以 space-1.mp3 结尾的歌曲)并将它们传送到 while 语句。

${word%filter} 语法表示获取 $word 并从右侧删除全局表达式 filter。因此,${file% 1.mp3} 是不带 1.mp3 后缀的文件名。现在,If I care 1.mp3 变为 If I care。因此,我们需要重新添加 .mp3 后缀。因此${file%1.mp3}.mp3。这为我们提供了文件的原始名称。

现在,我们使用 -e 测试来检查该文件是否存在。如果是这样,我们可以删除该歌曲的 space-1.mp3 版本。

我运行了一些基本测试,但我建议您先尝试一下(也许将 rm $file 更改为 echo Removing file $file 首先并验证这些文件是否具有原始文件)。

You want to go through your iTunes collection and remove Nickelback's If I care 1.mp3 but, only if the Nickelback original MP3, If I care.mp3, still exist. Right?

Hey, your musical tastes are up to you...

This should do the trick:

find -name "* 1.mp3" | while read file
do
   if [ -e "${file% 1.mp3}.mp3" ]
   then
       rm $file
   fi
done

I am finding all the duplicates (songs that end in space-1.mp3) and piping them to the while statement.

The ${word%filter} syntax says take the $word and remove from the right hand side the glob expression filter. Thus, ${file% 1.mp3} is the name of the file sans the 1.mp3 suffix. Now, If I care 1.mp3 becomes If I care. We, therefore need to add the .mp3 suffix back on. Thus ${file% 1.mp3}.mp3. This gives us the original name of the file.

Now, we use -e test to check if that file exists. If it does, we can delete the space-1.mp3 version of the song.

I ran some basic tests, but I suggest you try it out first (maybe change rm $file to echo Removing file $file first and verifying that those files do have the original).

眼波传意 2024-12-22 04:29:09

听起来像是find 的工作!

find . -type f -name '* 1.mp3' -print0 | xargs -0 rm 

Sounds like a job for find!

find . -type f -name '* 1.mp3' -print0 | xargs -0 rm 
野心澎湃 2024-12-22 04:29:09

与其他解决方案类似,但会检查不带“1”后缀的文件是否确实存在,因此不会意外删除名称以“1”结尾的歌曲。

shopt -s globstar
for file in **/*' '1.mp3 ; do
    if [[ -f "${file% 1.mp3}.mp3" ]] ; then
        rm "$file"
    fi
done

Similar to other solutions, but checks that the file without the " 1" suffix really exists, so it does not accidentaly remove songs whose names end in " 1".

shopt -s globstar
for file in **/*' '1.mp3 ; do
    if [[ -f "${file% 1.mp3}.mp3" ]] ; then
        rm "$file"
    fi
done
清醇 2024-12-22 04:29:09
find . -name "* 1.mp3" -exec rm {} \;
find . -name "* 1.mp3" -exec rm {} \;
银河中√捞星星 2024-12-22 04:29:09

快点:

find . -name "* 1.mp3" -exec rm {} +

Faster:

find . -name "* 1.mp3" -exec rm {} +
秋心╮凉 2024-12-22 04:29:09
find . -type f -name '* 1.mp3' -print0 | xargs -0 rm

kbyrd 提到的对我来说是最好的方法,因为 -print0 和 -0 组合。

-print0
真的;在标准输出上打印完整的文件名,然后
通过空字符(而不是换行符
- 打印使用)。这允许文件名包含换行符或
其他类型的空白可以被专业人士正确解释
处理查找输出的克。该选项对应于
xargs 的 -0 选项。

find . -type f -name '* 1.mp3' -print0 | xargs -0 rm

which kbyrd mentions is the best way according to me because of the -print0 and -0 combination because.

-print0
True; print the full file name on the standard output, followed
by a null character (instead of the newline character that
-print uses). This allows file names that contain newlines or
other types of white space to be correctly interpreted by pro‐
grams that process the find output. This option corresponds to
the -0 option of xargs.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文