Назад | Перейти на главную страницу

Сценарий Bash для перемещения файлов при создании каталогов

У меня есть этот сценарий, чтобы перебирать все папки и перемещать файлы, которым больше двух лет. Я использую команду установки, потому что она создает необходимые каталоги по пути назначения, а затем я удаляю источник. Я бы хотел изменить сценарий, чтобы использовать mv команда, так как это намного быстрее, чем копирование файла, а затем его удаление. Но я не знаю, как получить путь без имени файла для передачи в mkdir -p команда? Как мне изменить сценарий?

for d in *; do

find  "$d" -type f -mtime +730 -exec sh -c '

 echo "moving $d/{}" &&
 install -Dp "/data/Customer Files$d/{}" "/data/Customer Files Over 2 Years Old$d/{}" &&
 rm -f "/data/Customer Files$d/{}"' \;

done

Тебе нужно dirname но будьте осторожны, если вы дадите ему имя каталога, он предоставит вам путь до родительского каталога, возможно, пример проще:

$ dirname / usr / bin / bash
/ usr / bin

$ dirname / usr / bin
/ usr

Возвращаясь к вашему сценарию, тонкость имени каталога не играет роли, когда вы ищете файлы. Я тоже его немного упростил, подоболочка мне не понравилась, мне без нее проще разбираться. Это становится:

#!/bin/bash

SRC=./src
DST=./dst

for f in `cd $SRC && find . -type f -mtime +730`; do
    echo "moving $f"
    mkdir -p "$DST/`dirname $f`"
    mv "$SRC/$f" "$DST/$f"
done

Очевидно, вы должны установить SRC / DST в соответствии с вашими потребностями.

Кстати, mv быстрее, чем cp + rm когда вы находитесь в той же файловой системе FWIK.