SRC="/src"
export DEST="/dest"
find "${SRC}" -iname '*' -type f -exec bash -c 'EXT="${0##*.}"; EXT=${EXT,,}; if [[ "${EXT}" == *"/"* ]]; then EXT="no_extension"; fi; mkdir -p "${DEST}/${EXT}"; rsync -a "$0" "${DEST}/${EXT}"' "{}" \;
Этот сценарий организует SRC к DEST при помощи находки для итерации всех файлов в папке SRC и на каждом найденном файле, это выполняет следующее:
EXT
EXT
к нижнему региструEXT
содержите a /
символ? Если да, то EXT="no_extension"
$EXT
в $DEST
папкаrsync
файл к папке просто создается. -a
флаг для дополнительного-preservedness.Я хочу добавить больше к сценарию, как функция для игнорирования бесполезных типов файлов, но уже трудно добавить код к.
Как я могу перестроить это так, легче использовать?
Править: Это не исходная работа, но она изменяется мной. Это - единственный сценарий, я мог понять, что это сделало то, что я хотел. Но теперь я хочу добавить больше.
Спасибо!
Переместитесь все bash
команда к сценарию (скажите, в /some/path/sync.sh
):
#! /bin/bash
for i
do
EXT="${i##*.}"
EXT=${EXT,,}
if [[ "${EXT}" == *"/"* ]]
then
EXT="no_extension";
fi
mkdir -p "${DEST}/${EXT}"
rsync -a "$i" "${DEST}/${EXT}"
done
Тогда звонят find
таким образом:
SRC="/src"
export DEST="/dest"
find "${SRC}" -iname '*' -type f -exec /some/path/sync.sh {} +
И теперь добавляют все функции, которые Вы хотите.
, В частности, для игнорирования бесполезных расширений файла изменяя эти find
команда была бы лучше:
find ... ! -regex '.*\.(some|useless|exts) (С некоторым выходом (
и |
и соответствующий выбор -regextype
.)
... -exec
(С некоторым выходом (
и |
и соответствующий выбор -regextype
.)