我有大约 200 个图像文件名的列表。在 Web 服务器上,在一个目录的子文件夹结构中有多个具有这些文件名的文件实例。
有没有我可以运行的命令来查找这些文件名的所有实例并删除它们?
文件名示例
- image-488363450-1.jpg
- somename-186758341-1.jpg
- randomname-588968004-1.jpg
- blabla124405236-1-1.jpg
- someimage_MEDIUM.jpg
最佳答案
假设文件“badFiles”文件包含您想要删除的文件名列表,并且“myDirs”包含它们可能所在的子目录列表,以下应该有效:
for file in `cat badFiles`
do
for dir in `cat myDirs`
do
[ -f ${dir}/${file} ] && rm ${dir}/${file}
done
done
如果目录列表包含当前工作目录中的所有子目录,则无需创建 myDirs 文件即可执行以下操作:
for file in `cat badFiles`
do
for dir in *
do
[ -d ${dir} ] && [ -f ${dir}/${file} ] && rm ${dir}/${file}
done
done
要通过 SSH 调用它,您可以将以下脚本的内容放入一个文件中(在此示例中,我将使用位置 ${HOME}/bin/killImages.sh):
编辑~/bin/killImages.sh,使用以下内容。完成后,写入并保存。
#!/bin/bash
cd $1
for file in `cat ~/badFiles`
do
for dir in *
do
[ -d ${dir} ] && [ -f ${dir}/${file} ] && rm ${dir}/${file}
done
done
然后让你的脚本可执行:
chmod 700 ~/bin/killImages.sh
然后在您的本地系统上,执行:
ssh <user>@<hostname> "bin/killImages.sh /path/to/base/html"
如果您需要首先手动上传坏文件列表,您只需在启动脚本之前将其 scp 到位:
scp badFiles <user>@<hostname>:.
ssh <user>@<hostname> "bin/killImages.sh /path/to/base/html"
希望这对您有所帮助。
关于linux - 在我的网络服务器上的子文件夹中查找和删除文件名列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45984694/