Здравствуйте. Необходимо написать простой скрипт.
Суть заключается в следующем: имеем директорию с файлами, есть группы файлов, которые имеют одинаковое имя, но разные расширения (*.bsp, *.nav, *.res, *.txt), но есть и такие файлы, которые лежат в одном экземпляре. Необходимо рассортировать эти файлы по именам в папки /filename/dir1/dir2. Заранее благодарен.
«Необходимо» следует понимать «я готов заплатить» или «я пытаюсь написать скрипт, но у меня не получается»?
В первом случае — нужно создавать темы в соответствующем разделе;
во втором — что именно вы пытались сделать и что не получилось?
в основном с помощью find и команд оболочки.
Я примерно так понял задачу: в директории имеются файлы, нужно создать каталоги и рассортировать по ним эти файлы. Где имя каталога — имя группы файлов с одинаковым именем, в каталоге — подкаталоги по расширениям.
[quote="4fun"]С помощью чего это вообще можно сделать?
в основном с помощью find и команд оболочки.
Я примерно так понял задачу: в директории имеются файлы, нужно создать каталоги и рассортировать по ним эти файлы. Где имя каталога — имя группы файлов с одинаковым именем, в каталоге — подкаталоги по расширениям.[/quote]
Главная директория - название файла, в которой 2 вложенные директрии, которые имеют одинаковое имя для всех, и в конечную директорию нужно определить файлы.
Find'om найду, а сортировать чем?
Главная директория - название файла, в которой 2 вложенные директрии, которые имеют одинаковое имя для всех, и в конечную директорию нужно определить файлы.
Всё равно не понятно :( объясните «на пальцах», дайте пример.
"4fun" написал:
Find'om найду, а сортировать чем?
find имеет опцию -exec, которая может запустить нужную команду для найденных файлов.
Например, найти в директории DIR файлы с расширением .txt и скопировать в директорию DIR_1
text
find DIR -type f -name '*.txt' -exec cp {} DIR_1 \;
#!/bin/bash
# В качестве директории поиска скрипту передаётся первый аргумент, вторым аргументом передаётся директория назначения.
SRC_DIR=${1}
DST_DIR=${2}
find ${SRC_DIR} -type f -exec basename "{}" \; | sed -r 's/(.*)\..*/\1/' | sort -u | \
while read UNIQ_NAME;
do
mkdir -p "${DST_DIR}/${UNIQ_NAME}/cstrike/maps";
find ${SRC_DIR} -type f -name "${UNIQ_NAME}.*" -exec mv {} "${DST_DIR}/${UNIQ_NAME}/cstrike/maps" \;
done
#!/bin/bash
# В качестве директории поиска скрипту передаётся первый аргумент, вторым аргументом передаётся директория назначения.
SRC_DIR=${1}
DST_DIR=${2}
find ${SRC_DIR} -type f -exec basename "{}" \; | sed -r 's/(.*)\..*/\1/' | sort -u | \
while read UNIQ_NAME;
do
mkdir -p "${DST_DIR}/${UNIQ_NAME}/cstrike/maps";
find ${SRC_DIR} -type f -name "${UNIQ_NAME}.*" -exec mv {} "${DST_DIR}/${UNIQ_NAME}/cstrike/maps" \;
done
SRC_DIR=${1}
DST_DIR=${2}
То есть вместо ${1} я пишу откуда нужно читать файлы, а вместо ${2} куда?
То есть вместо ${1} я пишу откуда нужно читать файлы, а вместо ${2} куда?
text
./sort.sh /tmp/test /tmp/new
Изначально файлы расположены в /tmp/test, после сортировки в /tmp/new создастся структура каталогов.
P.S. В bash ${1} — первый аргумент команды; ${2} — второй аргумент команды...
То есть в контексте этого скрипта: присвоить переменной SRC_DIR значение перовго аргумента, DST_DIR — второго...