SEE VISUAL ПОЯСНЕНИЯ и EDITBash SH Script - Переименовать файл с определенным расширением + Переместить в определенное место
Я пытаюсь создать Баш скрипт, чтобы сделать переименование + ход.
Это пример ситуации:
|DOCTEMP - NameOfTheFolder---------|NameOfADocument.docx
FOLDER---|
|DOCFINAL - OtherNameOfTheFolder---|OtherNameOfADocument.pdf
|
|etc.
То, что я хочу сделать, это скрипт, который:
Часть I
только если файл docx, pdf, ppt
переименовать его как его папка, но без DOCTEMP -
/DOCFINAL -
.
NameOfADocument.docx => NameOfTheFolder.docx
OtherNameOfADocument.pdf => OtherNameOfTheFolder.pdf
Часть II
После переименования, переместите файл в другую папку, в зависимости от первой части названия старой папки.
NameOfTheFolder.docx => if **DOCTEMP** then => /ROOT/DOCTEMP/NameOfTheFolder.docx
OtherNameOfTheFolder.docx => if **DOCFINAL** then => /ROOT/DOCFINAL/OtherNameOfTheFolder.pdf
Я пытался использовать что-то вроде этого, но он не работает
#!/bin/bash
cd "$ROOT/FOLDER"
# for filename in *; do
find . -type f | while IFS= read filename; do # Look for files in all ~/FOLDER sub-dirs
case "${filename,,*}" in # this syntax emits the value in lowercase: ${var,,*} (bash version 4)
*.part) : ;; # Excludes *.part files from being moved
move.sh) : ;;
*test*) mv "$filename" "$ROOT/DOCTEMP/" ;; # Using move there is no need to {&& rm "$filename"}
*) echo "Don't know where to put $filename" ;;
esac
done
EDIT: Визуальное объяснение
данного
ROOT/DOWNLOADS/OFFICE - House/file.docx
/IWORK - Car/otherfile.docx
затем Часть I
ROOT/DOWNLOADS/OFFICE - House/House.docx
/IWORK - Car/Car.docx
затем Часть II
ROOT/DOCUMENTS/OFFICE/House.docx
/IWORK/Car.docx
DOCX может быть PDF или PPT; здесь только пример
EDIT2: Окончательный сценарий
#!/bin/bash
shopt -s nullglob
for filename in /ROOT/DOWNLOADS/{OFFICE,IWORK}/*/*.{docx,pdf,ppt}; do
new_path="$(dirname $filename).${filename##*.}"
new_path="${new_path/DOWNLOADS/DOCUMENTS}"
echo "moving $filename -> $new_path"
mv "$filename" "$new_path"
done
Вы не должны изменить название вашего вопроса однажды он решил, просто принять правильный ответ;) –
Не редактировать «решаемые» в названиях здесь, ** или ** редактировать ответы на вопросы. Установите флажок, чтобы принять ответ, который он решит, и дает понять читателям, которые вы используете. –
... если вы используете что-то отличное от предложенных сторонних ответов, добавьте это как ответ самостоятельно, не редактируйте его в вопрос. –