我想要什么?
给定以下目录结构:
.
├── bar.py
├── hap
│ ├── bla.py
│ └── tests
│ └── test_hap.py
└── hip
├── testimony.py
└── tests
├── foo.py
└── test_hip.py
我想去以下地方:
.
├── bar.py
├── hap
│ ├── bla.py
│ └── tests
│ └── test_hap.py.bad
└── hip
├── testimony.py
└── tests
├── foo.py
└── test_hip.py.bad
因此,我想附加到位于目录中.bad
以 开头的所有文件。test_
tests
我尝试过什么?
从给出的提示中此主题,我尝试了以下方法:
shopt -s globstar
rename "s/tests\/test_.*/tests\/test_.*\.bad/" **
但是替换模式部分.*
中的似乎是自动转义的。我怎样才能让第二个被解释为正则表达式?new
s/old/new
.*
此外,使用test_.*\.bad$
可给我以下信息:
Final $ should be \$ or $name at (eval 1) line 1, within string
答案1
对于这样的事情,“查找”非常有用(请注意,这可能仅当您的路径没有空格时才有效)。
find /directory/path -type f -name "test_*" -exec mv {} {}.bad \;
Find 可以根据目录树进行过滤以查找您想要的内容,然后 find 的 exec 参数允许您将找到的内容替换为“{}”。