Скрипт Bash для перемещения файлов при создании каталогов
У меня есть этот скрипт, чтобы перебрать все папки и переместить файлы, которые старше 2 лет. Я использую команду установки, потому что она создает необходимые каталоги по пути назначения, а затем я удаляю исходный код. Я хотел бы изменить сценарий, чтобы использовать 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
1 ответ
Тебе нужно dirname
но будьте осторожны, если вы дадите ему имя каталога, он даст вам путь до родительского каталога, может быть, пример будет проще:
$ dirname /usr/bin/ bash
/ USR / бен$ dirname / usr / bin
/ USR
Возвращаясь к вашему сценарию, тонкость dirname не проявляется при поиске файлов. Я тоже немного упростил, мне не понравился подоболочка, без меня разобрать проще. Это становится:
#!/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.