Я хотел бы переместить файлы в каталог в папки с теми же именами. Я хотел бы сделать все это использование командной строки или сценария удара
#!/bin/bash
for f in $1; do
mv "$f".* <not sure what do do>
done
Как я могу захватить названия файлов и создать папки?
Ответ в процессе строительства, пожалуйста, быть терпеливым :)
, Как это работает
, Создает файл, названный makeDirs.sh
, копия по реву сценария в файл, экономит и делает исполняемый файл сценария с chmod +x /path/to/makeDirs.sh
, НЕ ЗАБЫВАЮТ ИМЕТЬ РЕЗЕРВНЫЕ КОПИИ ПРЕЖДЕ, ЧЕМ УПРАВЛЯТЬ ЛЮБЫМ Требованием СЦЕНАРИЯ
сценарий со справочником, на котором Вы хотите действовать в качестве аргумента командной строки. Образец
Сценарий
#!/bin/bash
OPERATINGDIR="$1"
mkdir "$OPERATINGDIR/TMP"
find "$OPERATINGDIR" -maxdepth 1 -type f | while IFS= read FILE
do
printf " operating on $FILE. Moving to TMP dir\n"
mv "$FILE" "$OPERATINGDIR/TMP"
FULLBASENAME="$(basename "$FILE" )"
CROPPEDBASENAME="$( basename "$FILE" | awk -F'.' '{ for(i=1;i<NF;i++) printf $i FS }' )"
printf "Cropped basename is %s\n Full basename %s\n" "$CROPPEDBASENAME" "$FULLBASENAME"
# test if we have basename-directory made
[ -d "$OPERATINGDIR"/"$CROPPEDBASENAME" ] || mkdir "$OPERATINGDIR"/"$CROPPEDBASENAME" && printf "created "$OPERATINGDIR"/"$CROPPEDBASENAME" "
printf "Moving $FILE from TMP folder to "$OPERATINGDIR"/"$CROPPEDBASENAME" \n"
mv "$OPERATINGDIR"/TMP/"$FULLBASENAME" "$OPERATINGDIR"/"$CROPPEDBASENAME"
printf "\n\n"
done
Насколько я понимаю Вы намереваетесь поставлять имя каталога как первый аргумент скрипта оболочки. Файлы в том справочнике должны быть перемещены в подкаталоги того справочника, имена которого совпадают с файлами, но с опущенными расширениями. В этом случае:
#!/bin/bash
for f in "$1"/*
do
[ -d "$f" ] && continue
base=${f%.*}
mkdir -p "$base"
mv "$f" "$base/"
done
, Как это работает:
[ -d "$f" ] && continue
, Чтобы избежать рекурсии, это пропускает подкаталоги $1
.
base=${f%.*}
Это назначает, чтобы обстрелять переменную base
название $f
с его удаленным расширением. Это - пример удаление суффикса .
mkdir -p "$base"
Это удостоверяется, что справочник $base
существует.
mv "$f" "$base/"
Это перемещает файл в справочник.