создайте каталог для каждого файла и создайте “n” копий для каждого файла

#bash #file #directory #copy

#баш #файл #каталог #Копировать

Вопрос:

пока я искал решение для своих файлов, я нашел кое-что идеальное, я включаю ответ здесь: https://unix.stackexchange.com/questions/219991/how-do-i-create-a-directory-for-every-file-in-a-parent-directory/220026#220026?newreg=94b9d49a964a4cd1a14ef2d8f6150bf8

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

 ls -p | grep -v / | xargs -t -n1 -i bash -c 'for i in {1..50}; do cp {} "{}_folder/copy${i}_{}" ; done'
 

чтобы получить следующее

 -file1.csv---->folder_for_file1---->1copy_file1.csv,2copy_file1.csv,3copy_file1.csv........50copy_file1.csv
-file2.csv---->folder_for_file2---->1copy_file2.csv,2copy_file2.csv,3copy_file2.csv........50copy_file2.csv
-file3.csv---->folder_for_file3---->1copy_file3.csv,2copy_file3.csv,3copy_file3.csv........50copy_file3.csv
...
-file256.csv---->folder_forfile256---->1copy_file256.csv,2copy_file256.csv,3copy_file256.csv........50copy_file256.csv
 

Как я могу сопоставить это с предыдущим ответом ??, включите функциональный код этого ответа

 cd ParentFolder
for x in ./*.csv; do
  mkdir "${x%.*}" amp;amp; mv "$x" "${x%.*}"

done
 

все заслуги человеку, который сгенерировал этот замечательный ответ, и заранее всем спасибо

Ответ №1:

Замените перемещение на копирование / удаление и добавьте цикл for:

 cd ParentFolder
for x in ./*.csv; do
  mkdir "${x%.*}"
  for (( i=1;i<=50;i   )); do # Create a loop, looping 50 times
     cp "$x" "${x%.*}/copy$i_$x" # use i in the copy command
     rm -f "$x" # Remove the file after the 50 copies
  done
done
 

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

1. Я пробовал это решение, но, видимо, оно работает не так, как ожидалось, но тем не менее я очень благодарен вам за ваше внимание

2. В чем же проблема?

3. На самом деле я только что заметил и внес поправки. Я не поместил каталог в пункт назначения для команды копирования.

4. Я понимаю, но я думаю, что когда он генерирует копии, он удаляет их все или не генерирует их в начале, но я не знаю, может быть, это моя версия bash, я использую версию 4.3.48

5. Этого не должно быть. $x — это начальный файл, ${x%.*} — каталог, а $ i — номер копии. rm -f $ x удалит только исходный файл.

Ответ №2:

Я провел несколько тестов и могу опубликовать следующий код, который работает частично, потому что он эффективно копирует каждый файл 50 раз в сгенерированную папку, но с именем «копировать» для каждого нового файла, а также добавляет расширение .csv, но если кто-то может предоставить решение для решения этой проблемы, я быотлично, я благодарю @Raman Sailopal за его помощь и комментарии

код

 cd pruebas
for x in ./*.csv; do
    mkdir "${x%.*}" 
    for ((i=1;i<=50;i  )); do # Create a loop, looping 50 times
    cp "$x" "${x%.*}/copy_$x_$i.csv" # use i in the copy command
    #rm -f "$x" # Remove the file after the 50 copies
    done
done