Bash循环 – 为目录中每个现有的txt文件创build一个文件夹

Bash循环 – 为目录中每个现有的txt文件创build一个文件夹,第1张

概述Bash循环 – 为目录中每个现有的txt文件创build一个文件夹

我在我想组织的目录中有文本文件。 我正在试图通过创build一个目录为每个文件bash。 当我将文件移动到各自的新文件夹时,我想要修改原始filename并创build一个包含原始文件名(此文件也位于新文件夹中)的附加文本文件labeld info.txt 。 文件名称更改从xxx-file_name-aa1.txt到xxx-aa1.txt 。 第一个和最后一个之间的任何东西-被剥离出来。 该文件夹与文件xxx-aa1具有相同的名称。

test.sh(我的sed语句去掉空白处,把所有东西都变成小写-

file_PATH="/media/sf_linux_sandBox/txt_files/" while read -r file; do #sed statement empty new_name=$(echo "$file" | sed 's/^(.*)(-[^-]*)$/L1E2/; s/ *- */-/; s/^(.*) +- *([^-]*)$/1-2/; s/ /_/g') mv "$file" "$new_name" done < <(find $file_PATH -maxdepth 1 -type f -name '*.txt')

input:

|-- ./ | |-- xxxx-test_file1-aa1.txt | |-- xxxx-test_file2-bb2.txt

期望的输出:

如何检测git克隆是否在bash脚本中失败

从linux连接到windows来执行任务

在Mac和linux上使用terminal有什么区别?

unix shell脚本中出现分段错误(core dumped)错误。 帮助发现错误?

windowsbatch file&&运算符

|-- ./ | |-- xxxx-aa1 | |--xxx-aa1.txt | |--info.txt // contains name 'test_file1' | |-- xxxx-bb2 |--xxx-bb2.txt |--info.txt // contains name 'test_file2'

当前输出

|-- ./ | |-- xxxx-test_file-aa1 | |--xxxx-test_file-aa1.txt | |-- xxxx-test_file-bb2 |--xxxx-test_file-bb2.txt

在两台服务器之间使用远程rsync断开pipe道

不匹配任何东西的球体扩展到自身,而不是一无所获

在Apache Nifi中从ExecuteProcess调用远程shell脚本时,无法将envionmentvariables作为敏感字段传递

将目录中的所有文件复制到linux中的本地子目录中

如何在linux中只使用fs和bash来从IPv4地址获取接口名称?

你实际上可以在Bash中完成所有这些 *** 作。

既然你有-maxdepth 1它看起来像你可以使用通配符而不是find所以我也重构了这一点。

file_PATH="/media/sf_linux_sandBox/vIDeos/" for file in "$file_PATH"/*.mp4; do tmp=${file#*-}; head=${file%-"$tmp"} mID=${tmp%-*}; tail=${tmp#"$mID"-} base="${head,}-${tail,}" dir=${base%.mp4} mkdir -p "$dir" mv "$file" "$dir/$base" echo "$mID" >"$dir"/info.txt done

简而言之, ${var#prefix}扩展为var的prefix被删除的值, ${var%suffix}相应地用后缀执行相同的替换。 最后, ${var,}生成值的小写版本。 然后我们简单地从这些部分组装你想要的文件名结构。

改变sed为

new_name=$(echo "$file" | sed -r 's/-[^-]*-/-/g')

例如:

$ echo xxxx-test_file-aa1.txt | sed -r 's/-[^-]*-/-/g' xxxx-aa1.txt

-[^-]*-选择两个之间的字符串,sed将其替换为-

您也可以使用grep命令来获取目录的名称

$ echo $new_name | grep -o '^[^.]*' xxxx-aa1

^[^.]*选择文件名中不包含的部分. 即省略扩展名。

编辑

获取文件的名称

$ echo "xxx-test_file-aa1.txt" | grep -oP '(?<=-)[^.]*(?=-)' test_file

(?<=-) lookbehind断言检查模式是否被preseced -

(?=-)前瞻断言检查模式是否跟随-

[^.]*模式匹配除了. ,选择文件名

总结

以上是内存溢出为你收集整理的Bash循环 – 为目录中每个现有的txt文件创build一个文件夹全部内容,希望文章能够帮你解决Bash循环 – 为目录中每个现有的txt文件创build一个文件夹所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1267036.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存