我有一個約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標誌來控制。 –