首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将多个目录中的文件重命名为父目录的名称

将多个目录中的文件重命名为父目录的名称
EN

Stack Overflow用户
提问于 2016-03-28 05:40:06
回答 2查看 223关注 0票数 1

在我的目录中,我有多个名为内容的文件。我需要使用父目录的确切名称重命名它们,将其移出并删除父目录。

棘手的部分是父目录名格式是a.txt、b.pdf、c.mp3,因此需要将文件内容重命名为content.txt、content.pdf、content.mp3,然后移出目录并删除该目录。

代码语言:javascript
复制
ex;
INPUT

a.txt/content
b.pdf/content
c.mp3/content

OUTPUT

a.txt
b.pdf
c.mp3

我使用了这个find命令,并给出了所需的echo输出,我不知道从那里到哪里。

代码语言:javascript
复制
find . -type d -not -empty -exec echo mv \{\}/content \{\} \;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-28 06:15:29

在中间步骤中保存具有.bak扩展名的文件,然后将其重命名为所需的名称:

代码语言:javascript
复制
find . -mindepth 2 -type f -exec bash -c 'mv "$1" "${1%/*}".bak' _ {} \; \
       -exec bash -c 'rm -r "${1%/*}"' _ {} \; && rename 's/\.bak$//' *.bak

示例:

代码语言:javascript
复制
% tree                                                    
.
├── a.txt
│   └── content
├── b.pdf
│   └── content
└── c.mp3
    └── content   

% find . -mindepth 2 -type f -exec bash -c 'mv "$1" "${1%/*}".bak' _ {} \; -exec bash -c 'rm -r "${1%/*}"' _ {} \; && rename 's/\.bak$//' *.bak

% tree
.
├── a.txt
├── b.pdf
└── c.mp3
票数 0
EN

Stack Overflow用户

发布于 2016-03-28 11:18:01

我只会在一个小脚本中使用for循环。

代码语言:javascript
复制
#!/bin/bash
DESTINATION=/home/whatever
for dir in *; do
    if [[ -e $dir/content ]]; then
         mv $dir/content $DESTINATION/conent.${dir##*.} && rm -rf $dir
    fi
done

&&将确保该目录仅在重命名成功后才被删除。

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

https://stackoverflow.com/questions/36256629

复制
相关文章

相似问题

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