Выполните итерации по файлам в каталоге, создайте папки на основе имен файлов и файлов перемещения в соответствующие папки

Я хотел бы переместить файлы в каталог в папки с теми же именами. Я хотел бы сделать все это использование командной строки или сценария удара

#!/bin/bash

for  f in $1; do
  mv "$f".* <not sure what do do>
done

Как я могу захватить названия файлов и создать папки?

0
задан 25 October 2015 в 23:43

2 ответа

Ответ в процессе строительства, пожалуйста, быть терпеливым :)

, Как это работает

, Создает файл, названный 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
1
ответ дан 30 September 2019 в 06:42

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

#!/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/"

    Это перемещает файл в справочник.

3
ответ дан 30 September 2019 в 06:42

Другие вопросы по тегам:

Похожие вопросы: