我想像这样解析我的 FLAC 音乐目录:
- 仅递归检查目录名称
- 如果目录名不包含字符串“FLAC”或“flac”,则在目录名末尾添加“ [FLAC]”。
这看起来正确地找到了不包含“FLAC”字符串的目录:
find . -type d -not -iname '*flac*'
那么我怎样才能将“ [FLAC]”附加到每个目录名称之后?
答案1
我会尝试这样的事情
find . -depth -mindepth 1 -type d -not -iname '*flac*' -execdir echo mv -n -- '{}' '{} [FLAC]' \;
echo
(仅经过彻底测试后才可删除)。
该-depth
选项指定深度优先搜索,这避免了尝试重命名祖先已被重命名的子项的情况。 阻止-mindepth 1
它尝试添加[FLAC]
到当前目录,.
替换字符串的准确引用取决于个人喜好 -... {} {}\ \[FLAC\]
或者... {} {}' [FLAC]'
效果同样好。
请注意,虽然 GNUfind
会替换{}
所有地方(而不仅仅是单独出现的地方),但其他实现可能不会 - 在这种情况下,你需要执行类似
... -execdir sh -c 'for d; do echo mv -n -- "$d" "$d [FLAC]"; done' find-sh {} +
答案2
您可以编写一个简单的脚本来处理目录名称,并使用find
管道xargs
将目录名称提供给脚本。例如:
find . -type d -print0 | \
xargs -0 $HOME/bin/waltscript
并在 中进行检查和重命名$HOME/bin/waltscript
。