在终端中将文件重命名为父目录的名称

DTR

我必须处理大量嵌套在目录内的文件(每个目录一个文件),类似于以下内容:

fred/result.txt
john/result.txt
mary/result.txt
...

我目前正在使用以下命令来处理每个文件:

find . -maxdepth 1 -type d \( ! -name . \) -exec bash -c \"cd '{}' && processResult result.txt\" \;

我正在寻找可以添加到该命令末尾的内容,该文件名会将文件名更改为fred.txt,等等,然后稍后将文件移至父目录以消除多余的目录层。

最好的方法是什么?

塞尔吉(Sergiy Kolodyazhnyy)

我们可以使用经典方法:findwhile read组合:

演示:

$ ls *
fred:
results.txt

jane:
results.txt

john:
results.txt

$> find . -type f -name "results.txt" -printf "/%P\n" | while read FILE ; do DIR=$(dirname "$FILE" );\                            
>  mv ."$FILE" ."$DIR""$DIR".txt;done                                                                                             
$> ls
fred/  jane/  john/
$> ls *
fred:
fred.txt

jane:
jane.txt

john:
john.txt

使用echo使用前mv要测试你的文件就行了。

小改进

我们可以bash使用参数扩展(特别是前缀删除)将对的调用嵌入到exec中。基本上,它是将脚本嵌入到exec调用中。

$> find "$PWD" -type f -name "results.txt" -exec bash -c ' DIR=$( dirname "{}"  ); echo "{}" "$DIR"/"${DIR##*/}".txt  ' \;                
/home/xieerqi/TESTDIR/fred/results.txt /home/xieerqi/TESTDIR/fred/fred.txt
/home/xieerqi/TESTDIR/jane/results.txt /home/xieerqi/TESTDIR/jane/jane.txt
/home/xieerqi/TESTDIR/john/results.txt /home/xieerqi/TESTDIR/john/john.txt

要使该命令具有通用性((可用于任何文件,而不仅限于results.txt)),只需删除-name "results.txt"一部分即可。另请参阅这篇文章,以获取替代的Python解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

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

将目录中的所有文件从$ filename_h重命名为$ filename_half?

PHP:以递归方式将目录中的所有文件重命名为小写

将zip文件大量重命名为原始名称,但删除部分名称

如何在git中将哪个文件重命名为哪个文件?

对于目录,将具有子目录名称+旧文件名的子目录中的文件重命名为新目录

如何在终端上将所有目录中的文件重命名为相同的名称

将子目录中的pdf文件重命名为子目录的名称

C#将文件重命名为与其他目录中的文件相同的名称

Winrar批处理脚本(略有改动)-将提取的文件重命名为当前目录

终端:将多个JPG文件重命名为HEIC格式,并提供条件

Windows CMD-如何将所有子文件夹中的所有文件重命名为父文件夹名称

从终端递归将所有文件和文件夹重命名为Title Case

在Python中将文件批量重命名为其目录结构的一部分

终端:将多个文件重命名为数字顺序

递归搜索,将jpg文件复制并重命名为父文件夹名称

将子目录中的多个文件重命名为其目录名称

如何使用终端将具有序列名称的文件重命名为另一个序列?

我想将目录中的所有文件从* .ts重命名为* .mkv

Ruby:将用户给定目录中的所有文件从.txt重命名为文本

将文件重命名为子目录

如何在保持文件扩展名的同时将目录中的文件重命名为其各自的目录名称?

将所有文件和目录重命名为小写(包括 unicode)的脚本

以递归方式将输出 PDF 文件重命名为子目录名称 Powershell

linux中将文件重命名为父目录名的一部分

如何使用 exiftool 将文件重命名为 CSV 导入文件中包含的新名称

WebStorm 在终端中打开文件夹并自动将会话重命名为文件夹名称

将文件夹中的文件重命名为一个名称

将子文件夹中的文件批量重命名为父文件夹名称