在我的目录中,我有多个名为内容的文件。我需要使用父目录的确切名称重命名它们,将其移出并删除父目录。
棘手的部分是父目录名格式是a.txt、b.pdf、c.mp3,因此需要将文件内容重命名为content.txt、content.pdf、content.mp3,然后移出目录并删除该目录。
ex;
INPUT
a.txt/content
b.pdf/content
c.mp3/content
OUTPUT
a.txt
b.pdf
c.mp3我使用了这个find命令,并给出了所需的echo输出,我不知道从那里到哪里。
find . -type d -not -empty -exec echo mv \{\}/content \{\} \;发布于 2016-03-28 06:15:29
在中间步骤中保存具有.bak扩展名的文件,然后将其重命名为所需的名称:
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
│ └── 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发布于 2016-03-28 11:18:01
我只会在一个小脚本中使用for循环。
#!/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&&将确保该目录仅在重命名成功后才被删除。
https://stackoverflow.com/questions/36256629
复制相似问题