首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash mv不是目录

bash mv不是目录
EN

Stack Overflow用户
提问于 2012-03-16 09:31:42
回答 3查看 974关注 0票数 1

我有这个:

代码语言:javascript
复制
$ ls a
0  1  1_  2  2_  3  3_  4  4_  5  5_  6  6_  7  7_  8  8_  9  9_  a  a_  b  b_  c  c_ 
d  d_  e  e_  f  f_

想要将x_移到x,我尝试这样做:

代码语言:javascript
复制
find a/*_ -type f -exec sh -c 'mv echo "$1" echo "$1" | sed \'\$s/.$//'' sh {} \;

我得到的是:

代码语言:javascript
复制
mv: target `a/x_' is not a directory
EN

回答 3

Stack Overflow用户

发布于 2012-03-16 09:37:54

最好使用prename ;)

代码语言:javascript
复制
prename 's/.$//' a/*_

取决于您的发行版,有时称为“重命名”。有时有一个ELF格式的,但perl格式是必需的,您可以像这样测试它:file $(readlink -f $(type -p rename))

票数 1
EN

Stack Overflow用户

发布于 2012-03-16 09:41:44

我很想使用:

代码语言:javascript
复制
(cd a; for file in *_; do mv "$file" "${file%_}"; done)
票数 1
EN

Stack Overflow用户

发布于 2012-03-16 09:44:03

代码语言:javascript
复制
for f in {1..9}; do test -e $f_ && mv ${f}_ $f ; done
for f in {a..d}; do test -e $f_ && mv ${f}_ $f ; done 

这个测试可以更好地检查$f_是否是test -f $f_的文件,我可以提供一个测试来确保$f存在并且是一个目录:

代码语言:javascript
复制
for f in {1..9} {a..d}
do 
    test -f $f_ && test -d $f && mv ${f}_ $f
done

如果没有目录$f,上面的命令会将$f_重命名为$f,如果$f存在并且是一个文件,则覆盖它。

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

https://stackoverflow.com/questions/9730656

复制
相关文章

相似问题

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