Как можно было бы взять все файлы *.txt
в заданной папке (пользовательский ввод) и скопировать нечетные строки в файлы с одинаковыми именами, но с другим расширением (bat / html или что-нибудь еще)
I Предположим, что cp
или mv
не сработает, что-то вроде sed
должно сработать для линий, но я с трудом объединяю все вместе.
Если бы кто-нибудь мог помочь мне собрать это воедино, я был бы очень благодарен
#!/bin/bash
clear
#seems like a good idea to get a full path to the directory im gonna be working in, not #sure how to go about it though.
path=pwd
#getting users input
read Directory
#check if said directory exists
if[ -d $Directory]; then
#if it does
#all files with .txt extention are to be copied
for *.txt in $(ls)
do
mv *.txt *.bat
#aaand now im lost, didnt have a chance to even test this, since i have linux only in #my studying enviroment (uni), will get on my personal PC later on
#something like sed could/should work in there, but i have no idea how to go about it
#if doesnt
else
echo "Directory does not exist or you do not have a permission to alter its contents"
#!/bin/sh
cd "$1" || { echo "Couldn't cd to directory $1. Quitting." ; exit 1 ; }
for fname in *.txt
do
awk 'NR % 2 == 1 { print; }' "$fname" >"${fname%.txt}.bat"
done
Поместите вышеупомянутое в файл и сделайте файл исполняемым (chmod +x yourfilename
). Теперь запустите эту команду с каталогом, с которым вы хотите работать в качестве первого аргумента.
Сценарий изменится на каталог, который вы запрашиваете (cd "$1"
). Если это не удается (каталог не существует), то сценарий завершается с сообщением об ошибке. Если cd "$1"
завершается успешно, сценарий просматривает каждый файл .txt
в каталоге, выбирает нечетные строки (NR % 2 == 1
) и записывает их в файл с тем же именем, за исключением расширения «.bat».
Не уверенный, что Вы подразумеваете "под нечетными строками" [1], но этот оператор достигает, что Ваш код в настоящее время пытается сделать:
cd "$1" && rename 's/\.txt$/.bat/' *.txt
Никакая потребность сделать Ваши собственные сообщения об ошибках, оболочка сделает их очень хорошо.
[1] Это делает, это много походит на присвоение домашней работы Uni.
Спасибо всем, кто ответил, вы очень помогли мне получить некоторое понимание сценариев bash, теперь, когда этот вопрос решен, как можно было бы закрыть вопрос?
Я использовал предоставленный сценарий Джон 1024, работал безупречно. Очень благодарен за это. Приветствия
cd "$ 1" || {echo "Не удалось перейти к каталогу $ 1. Выход." ; выход 1; } для имени в * .txt do awk 'NR% 2 == 1 {print; } '"$ fname"> "$ {fname% .txt} .bat" сделано