首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在某个单词之后从文件夹名称中删除文本

如何在某个单词之后从文件夹名称中删除文本
EN

Ask Ubuntu用户
提问于 2020-06-12 21:42:20
回答 1查看 365关注 0票数 1

在本例中,需要帮助编写一个脚本/命令,在某个单词之后清除目录上的文本。曾想过要用一个for i语句,但却没有运气。

示例

歌曲乐队-歌曲名称下载9038450985934853434

音乐列表下载dkjge3j6lk45j45756567

视频图表下载4k645jel43k5yk574

试着把它弄清楚下载这个词和其他所有的东西都是这样的

歌曲乐队-歌曲名称

音乐列表

视频图

EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2020-06-12 22:53:33

下面是您需要的代码以及一些您不需要的测试数据:

代码语言:javascript
复制
#!/bin/bash

# NAME: truncate-dname
# PATH: $HOME/askubuntu/
# DESC: Answer for: https://askubuntu.com/questions/1249771/how-to-remove-text-from-a-folder-name-after-a-certain-word/1249785#1249785
# DATE: June 12, 2020

echo ==============  CREATE TEST DATA  ==================
mkdir -p dnames
cd dnames
mkdir -p "Song Band - Song Name download 9038450985934853434"
mkdir -p "Music List download dkjge3j6lk45j45756567"
mkdir -p "Video Chart download 4k645jel43k5yk574yryryrrtyryrryryrt"
ls

echo ==============  RENAME DIRECTORIES  ================
for old_name in ./*
do
    new_name="${old_name% download*}"
    mv -v "$old_name" "$new_name"
done

echo ==============  DELETE TEST DATA  ==================
ls
cd ..
rm -rf dnames

当您运行脚本时,您会得到以下内容:

代码语言:javascript
复制
$ truncate-dname
============== CREATE TEST DATA ==================
Music List download dkjge3j6lk45j45756567
Song Band - Song Name download 9038450985934853434
Video Chart download 4k645jel43k5yk574yryryrrtyryrryryrt
============== RENAME DIRECTORIES ================
'./Music List download dkjge3j6lk45j45756567' -> './Music List'
'./Song Band - Song Name download 9038450985934853434' -> './Song Band - Song Name'
'./Video Chart download 4k645jel43k5yk574yryryrrtyryrryryrt' -> './Video Chart'
============== DELETE TEST DATA ==================
Music List  Song Band - Song Name  Video Chart

您想要的关键操作是在搜索字符串之前提取字符串中的子字符串。例如:

代码语言:javascript
复制
$ a="Song Band - Song Name download 9038450985934853434"

$ b="${a% download*}"

$ echo $b
Song Band - Song Name

如果“下载”这个词出现在歌曲标题中,所以它在文件名中出现了两次,这个过程有点棘手:

代码语言:javascript
复制
$ c="People keep downloading my songs download 9038465489643541"

$ d="${c%% download*}"

$ echo $d
People keep

$ d="${c% download*}"

$ echo $d
People keep downloading my songs

当您有两个%%时,它会在第一个“下载”事件之后删除您不想要的所有内容。因此,在本例中,您只想使用一个%,所以最后一个“下载”是断点。

还有一个#操作,它搜索的方向与你绝对不想要的方向相反:

代码语言:javascript
复制
$ c="People keep downloading my songs download 9038465489643541"

$ e="${c##* download}"

$ echo $e
9038465489643541

$ e="${c#* download}"

$ echo $e
ing my songs download 9038465489643541

这是一个彻底参考

票数 1
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1249771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档