我有一个约200个图像文件名的列表。在Web服务器上,在一个目录内的子文件夹结构中有多个文件实例,这些文件名具有这些文件名。查找并删除我的网络服务器上的子文件夹中的文件名列表
是否有一个命令,我可以运行找到这些文件名的所有实例并删除它们?
文件名
- 图像488363450-1.jpg
- somename-186758341-1.jpg
- randomname-588968004-1.jpg
- blabla124405236-1-1的例子。 JPG
- someimage_MEDIUM.jpg
我有一个约200个图像文件名的列表。在Web服务器上,在一个目录内的子文件夹结构中有多个文件实例,这些文件名具有这些文件名。查找并删除我的网络服务器上的子文件夹中的文件名列表
是否有一个命令,我可以运行找到这些文件名的所有实例并删除它们?
文件名
假设文件“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 badFiles <user>@<hostname>:.
ssh <user>@<hostname> "bin/killImages.sh /path/to/base/html"
希望这有助于。
find /path/to/files -type f -name "image*" -exec rm -f {} \;
(这实际上是从here)
这会查看子文件夹吗? – blablaman4000
是的,它也在子文件夹中看起来 – Lucian
不适合我,因为我没有匹配的模式。它只是一个文件列表 – blablaman4000
看起来不错,会试试看! – blablaman4000
什么类型的文件是badFiles。它是一个.txt文件每行其他的一行吗? @ paul-h – blablaman4000
如果所有的文件都匹配模式“image *”或“image * jpg”,那么我会和Lucian建议使用find。是的,这将遍历所有子目录。如果这不是你想要的(你只希望比起始目录更深一层),可以用-depth标志来控制。 –