пока я искал решение для своих файлов, я нашел что-то идеальное, я включаю ответ здесь: https://unix.stackexchange.com/questions/219991/how-do-i-create-a- каталог-для-каждого-файла-в-родительском-каталоге/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%.*}" && mv "$x" "${x%.*}"
done
все кредиты человеку, который создал этот отличный ответ, и заранее всем спасибо
Замените перемещение на копирование/удаление и добавьте цикл 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
В чем проблема?
На самом деле я только что заметил и исправил. Я не поместил каталог в место назначения для команды копирования.
Я понимаю, но я думаю, что когда он генерирует копии, он удаляет их все, или он не генерирует их в начале, но я не знаю, может быть, это моя версия bash, я использую версию 4.3.48
Этого не должно быть. $x — исходный файл, ${x%.*} — каталог, а $i — номер копии. rm -f $x удалит только исходный файл.
больше похоже на конвертер файлов в папки, но спасибо за помощь
Он создает каталог, а затем копирует файл $x в папку {x%.*}/copy$i_$x. Это каталог, за которым следует /, затем копировать, затем _, затем имя файла. Разве это не то, что вы ищете?
Я провел некоторые тесты и могу опубликовать следующий код, который частично работает, потому что он эффективно копирует каждый файл 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
Я попробовал это решение, но, видимо, оно не работает так, как ожидалось, но тем не менее большое спасибо за внимание