如何获取*.txt
给定文件夹中的所有文件(用户输入)并将奇数行复制到具有相同名称但不同扩展名的文件(bat / html 或其他任何文件)
我认为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
#!/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