/bin/sh 复制代码

/bin/sh 复制代码

如何获取*.txt给定文件夹中的所有文件(用户输入)并将奇数行复制到具有相同名称但不同扩展名的文件(bat / html 或其他任何文件)

我认为cpmv不会起作用,类似的东西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

#!/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”的文件中。

答案2

不确定您所说的“奇数行”[1] 是什么意思,但是此语句实现了您的代码当前尝试执行的操作:

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

不需要自己处理错误消息,shell 会很好地处理它们。

[1] 这听起来很像大学的家庭作业。

答案3

感谢所有回复的人,你们帮助我更好地了解了 bash 脚本,现在这个问题已经解决了,那么如何关闭问题呢?

我使用了 John1024 提供的脚本,运行完美。非常感谢。谢谢

/bin/sh 复制代码

cd "$1" || { echo "无法 cd 到目录 $1。退出。" ; exit 1 ; } for fname in *.txt do awk 'NR % 2 == 1 { print; }' "$fname" >"${fname%.txt}.bat" done

相关内容