#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