2017-08-31 46 views
0

我有一个约200个图像文件名的列表。在Web服务器上,在一个目录内的子文件夹结构中有多个文件实例,这些文件名具有这些文件名。查找并删除我的网络服务器上的子文件夹中的文件名列表

是否有一个命令,我可以运行找到这些文件名的所有实例并删除它们?

文件名

  • 图像488363450-1.jpg
  • somename-186758341-1.jpg
  • randomname-588968004-1.jpg
  • blabla124405236-1-1的例子。 JPG
  • someimage_MEDIUM.jpg

回答

0

假设文件“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" 

希望这有助于。

+0

看起来不错,会试试看! – blablaman4000

+0

什么类型的文件是badFiles。它是一个.txt文件每行其他的一行吗? @ paul-h – blablaman4000

+0

如果所有的文件都匹配模式“image *”或“image * jpg”,那么我会和Lucian建议使用find。是的,这将遍历所有子目录。如果这不是你想要的(你只希望比起始目录更深一层),可以用-depth标志来控制。 –

0
find /path/to/files -type f -name "image*" -exec rm -f {} \; 
  • 名称“FILE-TO-FIND”:文件模式。
  • exec rm -rf {} \; :删除文件模式匹配的所有文件。
  • type f:只匹配文件,不包含目录名称。

(这实际上是从here

+0

这会查看子文件夹吗? – blablaman4000

+0

是的,它也在子文件夹中看起来 – Lucian

+0

不适合我,因为我没有匹配的模式。它只是一个文件列表 – blablaman4000

相关问题