Bash: изменение расширений всех файлов в каталоге и копирование нечетных строк

Как можно было бы взять все файлы *.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"
1
задан 16 December 2013 в 07:57

3 ответа

#!/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».

0
ответ дан 16 December 2013 в 07:57

Не уверенный, что Вы подразумеваете "под нечетными строками" [1], но этот оператор достигает, что Ваш код в настоящее время пытается сделать:

cd "$1" && rename 's/\.txt$/.bat/' *.txt

Никакая потребность сделать Ваши собственные сообщения об ошибках, оболочка сделает их очень хорошо.

[1] Это делает, это много походит на присвоение домашней работы Uni.

0
ответ дан 16 December 2013 в 07:57

Спасибо всем, кто ответил, вы очень помогли мне получить некоторое понимание сценариев bash, теперь, когда этот вопрос решен, как можно было бы закрыть вопрос?

Я использовал предоставленный сценарий Джон 1024, работал безупречно. Очень благодарен за это. Приветствия

! / Bin / sh

cd "$ 1" || {echo "Не удалось перейти к каталогу $ 1. Выход." ; выход 1; } для имени в * .txt do awk 'NR% 2 == 1 {print; } '"$ fname"> "$ {fname% .txt} .bat" сделано

0
ответ дан 16 December 2013 в 07:57

Другие вопросы по тегам:

Похожие вопросы: