我在我想组织的目录中有文本文件。 我正在试图通过创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一个文件夹所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)