我有 42000 多本 Project Gutenberg epub。通常一个版本既有图片版本,也有无图片版本。如果有图片副本,我想删除无图片副本。
...
pg16045-图像.epub
pg16045.epub
pg506.epub
...
在这种情况下,我想要删除 pg16045.epub,因为 pg16045-images.epub 存在,但不删除 pg506.epub,因为 pg506-images.epub 不存在。
我如何从命令行执行此操作?我正在使用 TCSH shell,但如果需要,我可以切换到 BASH。
答案1
如果确实有相应的文件,这将递归删除所有epub
文件。/somewhere
-images
find /somewhere -name '*-images.epub' -exec bash -c '
f="${0//-images/}"
[[ -f "$f" ]] && echo rm -- "$f"
' {} \;
echo
当您确定它正确时,请删除。
答案2
这将找到你所有的'-images.epub',然后尝试删除相应的'.epub' 目录,而不检查它是否存在。
#!/bin/sh
for d in *-images.epub ; do
rmname=`echo "$d" | sed -e 's/\(.*\)-images\(\.epub\)/\1\2/'`
echo rm "$rmname"
done
# end of file.
从行首删除“echo”即可使其真正起作用。在执行此类操作之前,最好先将命令回显到终端,看看这是否是您真正想要的。
答案3
这也许稍微短一点:
find /path/to/target/directory -name '*images.epub' -exec sh -c ' echo '{}' | sed 's/-images//' | xargs echo rm -f ' \;
答案4
这应该够了吧
DIR="/home/xyzuser/testdir" 对于我在 $(ls "$DIR"); 做 如果 [[ "$i" == *.images.epub ]] 然后 变量=${i%.*} 变量=${变量%.*} 如果[[-f“$ DIR / $ var.epub”]] 然后 rm "$DIR/$var.epub" 菲 菲 完毕
只需将 DIR 值更改为文件所在的位置即可。如果您将此脚本存储在文件中,请不要忘记使用以下命令使其可执行:
chmod +x 文件名.sh。否则,您将无法运行它。它所做的基本上就是。
- 循环遍历所有文件(名称)
- 如果文件包含“images.pub”,则会从文件名中删除“.images.epub”部分
- 然后检查是否有任何带有“.epub”后缀(结尾部分)的文件具有当前“.images.epub”文件的前缀(开头部分)。如果找到,则将其删除。