Создание папок из файлов в другую папку (bash)

#bash

#bash

Вопрос:

Мне нужна помощь, чтобы разобраться с папками и файлами в Linux.

 path1/path2/file_1:



file_A.txt 
file_B.txt 
file_C.txt 
file_D.txt 
  

и я хотел бы из этого file_1 создать по одной папке для каждого file_X.txt и поместить в соответствующую file_X.txt
итак, для этого примера я должен получить 4 новые папки в большой папке « Project «, которая получила название части file_X.txt без .txt :

 /Project/file_A
    file_A.txt

/Project/file_B
    file_B.txt

/Project/file_C
    file_C.txt

/Project/file_D
    file_D.txt
  

* Обратите внимание, что папка Project еще не существует.

Спасибо за вашу помощь.

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

1. Чтобы уточнить, поскольку оба ответа, похоже, предполагают иное: являются file_A.txt , file_B.txt и т.д. содержимое file_1 ?

2. Do path1/path2/file_1 содержит текстовый файл file_A.txt file_D.txt в виде текста? правильно? Где находятся файлы, которые вы хотите переместить в папки позже? или вы просто хотите коснуться пустого файла с именем folder .txt?

Ответ №1:

Что-то вроде приведенного ниже должно делать то, что вам нужно :

 for file in $(find /path/to/files/ -name "file_*.txt") 
do 
  name=$(basename "$file" .txt) 
  mkdir -p /Project/$name 
  mv "$file" /Project/$name  
done
  

Ответ №2:

Проверьте это

 for i in *.txt 
do  
  bname=$(basename -- $i)
  filename=${bname%.*}
  mkdir $filename 
  mv $i $filename
done
  

Ответ №3:

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

Другие ответы показывают, как создать структуру каталогов и переместить существующие файлы.

Если вам нужно создать структуру каталогов из списка, создав новые пустые файлы, вы могли бы сделать это:

 #!/bin/bash

manifest=/path1/path2/file_1 # Path to the file containing the list of files to create
parent=./Project # Path to the parent directory for the new sub-directories

while read -r filename; do
    basename="${filename%.txt}"
    mkdir -p "${parent}/${basename}"
    touch "${parent}/${basename}/$filename"
done < "$manifest"
  

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

1. Спасибо за вашу помощь