У меня есть большой список .mp4
файлы в одном каталоге на NAS (Сетевое хранилище данных).
Некоторые перечислены следующим образом:
XXXXX_3800.mp4
и другой как
XXXXX_8000.mp4
XXXXX
то же для обоих файлов.
Я хотел бы автоматизировать, удаляют XXXXX_8000.mp4
но ТОЛЬКО ЕСЛИ файл XXXXX_3800.mp4
существует.
Как я должен продолжить двигаться?
md bin
gedit
тире #!/bin/bash
#
# This script deletes video files of 8000 bps if and only if the 3800 bps file exists
# as set in http://askubuntu.com/questions/581400/how-to-delete-files-selected-by-rules
#
# Copyright (c) Fabby 2015
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. See the GNU General Public License for more details.
# You DID NOT receive a copy of the GNU General Public License along with this program as the license is bigger than this program.
# Therefore, see http://www.gnu.org/licenses/ for more details.
for szFile in $(ls *3800.mp4)
do
if [ -f ${szFile:0:${#szFile}-8}'8000.mp4' ] ; then
echo "deleting ${szFile:0:${#szFile}-8}8000.mp4..."
rm -f ${szFile:0:${#szFile}-8}'8000.mp4'
fi
done
~/bin/del8000
chmod +x ~/bin/del8000
cd ~/Videos
del8000
Если все файлы находятся в одном и том же каталоге, сценарий ниже должен сделать задание.
#!/usr/bin/env python3
import os
import sys
dr = sys.argv[1]; ids = ("_3800.mp4", "_8000.mp4")
checklist = [f[:-9] for f in os.listdir(dr) if f[-9:] in (ids)]
for f in [f for f in set(checklist) if checklist.count(f) != 1]:
os.remove(dr+"/"+f+"_8000.mp4")
Как это работает:
_3800.mp4
или _8000.mp4
, разделенный от их окончаний_8000.mp4
- версия от дубликатовНемного отличающийся подход. Это сравнивает файлы рекурсивно и (только) удаляет _8000.mp4
- версия, если _3800.mp4
- версия существует.
Я не был уверен, что была потребность в рекурсивном поиске, но добавила его так или иначе.
Как это работает:
#!/usr/bin/env python3
import os
import sys
files_dir = sys.argv[1]; file_list = []
#---
keep = "_3800.mp4"; rm = "_8000.mp4"
#---
for root, dirs, files in os.walk(files_dir):
for name in files:
if name.endswith(keep):
file_list.append(name)
for name in files:
if name.endswith(rm) and name.replace(rm, keep) in file_list:
os.remove(root+"/"+name)
Использовать любой из этих сценариев:
clean_directory.py
Выполните его, с каталогом для чистки как аргумент, командой:
python3 /path/to/clean_directory.py </path/to/directory/to/clean>