2017-08-31 44 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

相關問題