Linux 使用完整目录路径重命名子文件夹中的特定文件

Linux 使用完整目录路径重命名子文件夹中的特定文件,linux,bash,for-loop,find,rename,Linux,Bash,For Loop,Find,Rename,专家们,我有许多文件夹,文件夹中有许多子文件夹,子文件夹中包含许多文件。但是,在所有子文件夹中,有一个文件名与input.ps相同。现在我想用完整路径加文件名重命名相同的input.ps 因此,所有目录中的input.ps都应重命名为home\u wuan\u data\u files\u input.ps 我试过了 #!/bin/sh for file in /home/wuan/data/filess/*.ps do mv $file $file_ done 但它并不像我预期的那样,我希望

专家们,我有许多文件夹,文件夹中有许多子文件夹,子文件夹中包含许多文件。但是,在所有子文件夹中,有一个文件名与input.ps相同。现在我想用完整路径加文件名重命名相同的input.ps

因此,所有目录中的input.ps都应重命名为home\u wuan\u data\u files\u input.ps

我试过了

#!/bin/sh
for file in /home/wuan/data/filess/*.ps
do
mv $file $file_
done
但它并不像我预期的那样,我希望专家们能帮助我。提前谢谢

所以
input.
ps在所有目录中都应该重命名为
home\u wuan\u data\u files\u input.ps

您可以使用此
查找
解决方案:

find/home/wuan/data/files-type f-name'input*.ps'-exec bash-c'
对于f;do fn=“${f#/}”;回声mv“$f”“${fn/\/\/\}”;完成'{}+
所以
input.
ps在所有目录中都应该重命名为
home\u wuan\u data\u files\u input.ps

您可以使用此
查找
解决方案:

find/home/wuan/data/files-type f-name'input*.ps'-exec bash-c'
对于f;do fn=“${f#/}”;回声mv“$f”“${fn/\/\/\}”;完成'{}+

好的,所以
文件
最终将

/home/wuan/data/filess/input.ps
我们需要的是路径和完整的蛇壳名称。让我们从获取路径开始:

for f in /home/wuan/data/filess/*.ps; do
    path="${f%*/}";
这将匹配
f
的子字符串,直到最后出现
/
,有效地为我们提供路径

接下来,我们想把所有的东西都包装起来,这更容易:

for f in /home/wuan/data/filess/*.ps; do
    path="${f%*/}";
    newname="${f//\//_}"
这会将
/
的所有实例替换为
.
,并给出您希望新文件具有的名称。现在让我们把所有这些放在一起,将文件
f
移动到
path/newname

for f in /home/wuan/data/filess/*.ps; do
    path="${f%*/}";
    newname="${f//\//_}"
    mv "${f}" "${path}/${newname}"
done
这应该能奏效


以下是您可以使用的众多网站之一


很抱歉延迟更新,我大楼的电源刚刚切断:)

好的,所以
文件将被关闭

/home/wuan/data/filess/input.ps
我们需要的是路径和完整的蛇壳名称。让我们从获取路径开始:

for f in /home/wuan/data/filess/*.ps; do
    path="${f%*/}";
这将匹配
f
的子字符串,直到最后出现
/
,有效地为我们提供路径

接下来,我们想把所有的东西都包装起来,这更容易:

for f in /home/wuan/data/filess/*.ps; do
    path="${f%*/}";
    newname="${f//\//_}"
这会将
/
的所有实例替换为
.
,并给出您希望新文件具有的名称。现在让我们把所有这些放在一起,将文件
f
移动到
path/newname

for f in /home/wuan/data/filess/*.ps; do
    path="${f%*/}";
    newname="${f//\//_}"
    mv "${f}" "${path}/${newname}"
done
这应该能奏效


以下是您可以使用的众多网站之一

很抱歉延迟更新,我大楼的电源刚刚切断:)

正在阅读线路;
做
fil=${line/\/\/};#将所有/字符转换为u以形成文件名
fil=${fil:1};#删除第一项—
dir=${line%/*};#提取目录
回显“mv$line$dir/$fil”;#回显移动命令
#mv“$line”$dir/$fil”;#删除注释以执行实际命令
读取行时完成
;
做
fil=${line/\/\/};#将所有/字符转换为u以形成文件名
fil=${fil:1};#删除第一项—
dir=${line%/*};#提取目录
回显“mv$line$dir/$fil”;#回显移动命令
#mv“$line”$dir/$fil”;#删除注释以执行实际命令

完成请注意,
echo
仅用于测试目的。一旦您对输出感到满意,只需在
mv
之前删除
echo
,我将进行测试,并让您知道@anubhavano它不起作用…实际上,我的文件与input_c1.ps、input_c4.ps有点不同,input_c2.ps等…但它只提供了我做的最后一个文件-键入f-name“input.ps”到-type f-name“input_b*.ps”你能更新代码吗?是的,我刚刚更新了。我们只需要
-name'input*.ps'
请注意
echo
仅用于测试目的。一旦您对输出感到满意,只需在
mv
之前删除
echo
,我将进行测试,并让您知道@anubhavano它不起作用…实际上,我的文件与input_c1.ps、input_c4.ps有点不同,input_c2.ps等…但它只提供了我做的最后一个文件-键入f-name“input.ps”到-type f-name“input_b*.ps”你能更新代码吗?是的,我刚刚更新了。我们只需要
-name'input*.ps'