Найти файл, создать подкаталог и переместить

Вы можете установить GRUB (вместо всей ОС) на USB-накопитель или компакт-диск и использовать его для загрузки. Иметь такой загрузочный носитель, как правило, приятно (по крайней мере, в системах без UEFI, если система настолько испортилась, что больше не загружается).

1
26.12.2018, 10:40
4 ответа

Следующий шелл-скрипт должен работать с деревом каталогов, которое вы указали в своем вопросе.

#!/bin/bash

for i in *.*
do
 if test -e "$i"
 then
  tmp="${i%%.*}"
  mkdir -p "$tmp"
  mv -i "$i" "$tmp"
 else
  echo "No file or directory matching '$i'"
 fi
done
  • 'Изменить каталог', cd, в каталог.

  • Создайте сценарий оболочки.

  • Дайте ему имя без точки , например shellscript(, потому что вы не хотите, чтобы он двигался сам ),

  • Запустите сценарий оболочки с помощью

    bash shellscript
    
  • Если вы намереваетесь создать новые файлы в верхней части дерева каталогов и снова запустить сценарий оболочки, вы можете «сделать его исполняемым»,

    chmod +x shellscript
    

    Затем вы можете запустить его «напрямую»,

    ./shellscript
    
1
27.01.2020, 23:18
cd Comb
for i in *; do mkdir -p ${i%%.*txt}; mv $i ${i%%.*txt}; done
1
27.01.2020, 23:18

Вы не слишком далеко продвинулись в своих попытках. Попробуйте эту небольшую адаптацию вашего собственного кода:

$ for file in *.cc.json*ml; do mkdir -p ${file%%.*}; mv -v ${file%%.*}.* ${file%%.*}; done
renamed '102.cc.json2.pre2.ml' -> '102/102.cc.json2.pre2.ml'
renamed '102.json2.pre1' -> '102/102.json2.pre1'
renamed '1.cc.json2.ml' -> '1/1.cc.json2.ml'
renamed '1.json2' -> '1/1.json2'
renamed '1.json2.pre1' -> '1/1.json2.pre1'
1
27.01.2020, 23:18

Вы можете упростить это, используя шаблоны glob. Если вы находитесь в каталоге Comb, вы можете сделать что-то вроде этого.

mkdir 1 102
mv 1\.* 1/
mv 102\.* 102/

Для этой простой задачи не нужны никакие циклы, но если у вас есть файлы такой же формы, как3.somefile.ml103.mm.ml66.anotherfile.jsonвы можете добиться большего успеха, автоматизировав это

names=(`ls -1 | grep -Po "^\d+" | uniq `)
mkdir ${names}
for i in ${names[@]}
do
 mv $i\.* $i        
done

Здесь также используется шаблон globи создается папка для каждого файла с уникальным номером.

1
27.01.2020, 23:18

Теги

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