gpt4 book ai didi

linux - 递归查找目录并在 Shell 脚本中重命名

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:46:37 26 4
gpt4 key购买 nike

我将一个简单的 Shell 脚本组合在一起以在 Linux 机器上运行,我会:

1) 在主目录中查找特定的子目录。这些子目录有一个非常具体的命名约定(见下文),它们总是在主目录下 2 最大深度。

2) 将这些子目录重命名为其原始名称的一部分。

例如,子目录命名为:

andrew-11111
andrew-11112
andrew-11113
andrew-11114

到达这些子目录的路径看起来像这样:

myphotos/sailing/photos/andrew-1111
myphotos/sailing/photos/andrew-1112
myphotos/biking/photos/andrew-1113
myphotos/hiking/photos/andrew-1114

我想从每个子目录中取出“andrew-”:

myphotos/sailing/photos/1111
myphotos/sailing/photos/1112
myphotos/biking/photos/1113
myphotos/hiking/photos/1114

我已经“找到”子目录并列出它们了。我也了解如何在命令行中复制和重命名。但是以我的 shell 脚本知识水平将它们组合在一起所花费的时间远远超出了我的承受能力。只是免责声明,我非常愿意学习,并且编写了一些 shell 脚本,但对此仍然是新手。非常感谢任何帮助或示例!

最佳答案

使用通配符匹配嵌套目录中的文件

您可以使用 bash parameter expansion运算符来操纵文件名。

for file in myphotos/*/photos/*; do
name=${file##*/} # remove everything up to last /
dir=${file%/*} # remove everything from last /
newname=${name##*-} # remove everything up to last -
mv "$file" "$dir/$newname"
done

如果你有基于 perl 的 rename 命令,你可以:

rename 's#[^/]*-##' myphotos/*/photos/*

关于linux - 递归查找目录并在 Shell 脚本中重命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48715711/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com