Создайте подпапку с тем же именем, что и родительская, и переместите в нее файлы

#linux #shell #unix

#linux #оболочка #unix

Вопрос:

У меня есть папки, как показано ниже. Я хочу создать подкаталог с тем же именем и переместить только несколько файлов в подкаталог

Ввод

  Parent

   folder1/a.txt
   folder1/b.txt
   folder2/a.txt
   folder2/b.txt
   folder3/a.txt
   folder3/b.txt 


Output

  Parent

  folder1/folder1/a.txt
  folder1/b.txt
  folder2/folder2/a.txt
  folder2/b.txt
  folder3/folder3/a.txt
  folder3/b.txt 
 

Я пробовал это, но это работает только для файлов, а не для папок

        for file in *; do dir=$(echo $file | cut -d. -f1); mkdir -p $dir; mv $file $dir; done
 

Комментарии:

1. Можете ли вы уточнить? Вопрос помечен как linux, но ссылка в вопросе предназначена для batch.

2. Синтаксис в связанном вопросе предназначен для Microsoft Windows, а не для Linux.

3. Извините за путаницу, я ищу решение для Linux

Ответ №1:

Если ваша оболочка — bash, вы можете запустить следующее:

 for file in */a.txt ; do 
    dir=${file%/a.txt}
    mkdir "$dir/$dir"
    mv "$file" "$dir/$dir"
done
 

Он использует расширение параметра для удаления /a.txt из имени файла, в котором остается только имя каталога $dir .

Комментарии:

1. Спасибо.. Будет ли это работать, если у меня есть несколько файлов, заканчивающихся на *a.txt это должно быть перемещено во вложенные папки?

2. Не без изменений.