Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSH递归地将所有子文件夹名称更改为特定名称_Ssh_Find_Exec_Superuser - Fatal编程技术网

SSH递归地将所有子文件夹名称更改为特定名称

SSH递归地将所有子文件夹名称更改为特定名称,ssh,find,exec,superuser,Ssh,Find,Exec,Superuser,我有无数个文件夹,每个文件夹下都有一个名为“thumbs”的子文件夹。我需要将每个子文件夹下的“thumbs”子文件夹名称更改为“thumb” 我试过了 find . -type d -exec rename 's/^thumbs$/thumb/' {} ";" 当我在包含所有子文件夹的文件夹中,并且每个子文件夹都包含需要用“thumb”重命名的“thumbs”文件夹时,我会在shell中运行它 我运行了这个命令,shell花了很多时间思考,然后我用CTRL+C停止,但是我检查了一下,当前目录

我有无数个文件夹,每个文件夹下都有一个名为“thumbs”的子文件夹。我需要将每个子文件夹下的“thumbs”子文件夹名称更改为“thumb”

我试过了

find . -type d -exec rename 's/^thumbs$/thumb/' {} ";"
当我在包含所有子文件夹的文件夹中,并且每个子文件夹都包含需要用“thumb”重命名的“thumbs”文件夹时,我会在shell中运行它


我运行了这个命令,shell花了很多时间思考,然后我用CTRL+C停止,但是我检查了一下,当前目录下没有重命名文件夹,我不知道我是否重命名了我所在目录之外的文件夹,有人能告诉我代码哪里错了吗?

目标1:将子文件夹“thumbs”更改为“拇指”如果只有一层深

输入示例:

./foo1/thumbs
./foo2/thumbs
./foo2/thumbs
find . -maxdepth 2 -type d | sed 'p;s/thumbs/thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb
./foo1/thumbs
./foo2/thumbs
./foo2/thumbs/thumbs
./foo2/thumbs
find . -type d | awk -F'/' '{print NF, $0}' | sort -k 1 -n -r | awk '{print $2}' | sed 'p;s/\(.*\)thumbs/\1thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb/thumb
./foo2/thumb
解决方案:

./foo1/thumbs
./foo2/thumbs
./foo2/thumbs
find . -maxdepth 2 -type d | sed 'p;s/thumbs/thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb
./foo1/thumbs
./foo2/thumbs
./foo2/thumbs/thumbs
./foo2/thumbs
find . -type d | awk -F'/' '{print NF, $0}' | sort -k 1 -n -r | awk '{print $2}' | sed 'p;s/\(.*\)thumbs/\1thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb/thumb
./foo2/thumb
输出:

./foo1/thumbs
./foo2/thumbs
./foo2/thumbs
find . -maxdepth 2 -type d | sed 'p;s/thumbs/thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb
./foo1/thumbs
./foo2/thumbs
./foo2/thumbs/thumbs
./foo2/thumbs
find . -type d | awk -F'/' '{print NF, $0}' | sort -k 1 -n -r | awk '{print $2}' | sed 'p;s/\(.*\)thumbs/\1thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb/thumb
./foo2/thumb
说明:

./foo1/thumbs
./foo2/thumbs
./foo2/thumbs
find . -maxdepth 2 -type d | sed 'p;s/thumbs/thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb
./foo1/thumbs
./foo2/thumbs
./foo2/thumbs/thumbs
./foo2/thumbs
find . -type d | awk -F'/' '{print NF, $0}' | sort -k 1 -n -r | awk '{print $2}' | sed 'p;s/\(.*\)thumbs/\1thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb/thumb
./foo2/thumb
使用
find
仅为所有“thumbs”文件夹提供一个级别深度。将输出输送到
sed
p
选项打印输入行,
sed
命令的其余部分将“thumbs”更改为“thumb”。最后,将管道连接到
xargs
-n2
选项告诉
xargs
使用管道中的两个参数,并将它们传递给
mv
命令

问题:

./foo1/thumbs
./foo2/thumbs
./foo2/thumbs
find . -maxdepth 2 -type d | sed 'p;s/thumbs/thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb
./foo1/thumbs
./foo2/thumbs
./foo2/thumbs/thumbs
./foo2/thumbs
find . -type d | awk -F'/' '{print NF, $0}' | sort -k 1 -n -r | awk '{print $2}' | sed 'p;s/\(.*\)thumbs/\1thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb/thumb
./foo2/thumb
这不会捕获更深的子文件夹。在这里不能简单地不使用深度,因为
find
从顶部打印输出,并且因为我们在
mv
之前用
sed
替换内容,
mv
将导致更深的子文件夹出错。例如,./foo/thumbs/thumbs/将不起作用,因为
mv
将首先处理。/foo/thumbs并使其成为。/foo/thumbs,但是下一个输出行将导致错误,因为。/foo/thumbs/thumbs/不再存在

目标2:所有子文件夹的“拇指”更改为“拇指”,无论其深度如何

输入示例:

./foo1/thumbs
./foo2/thumbs
./foo2/thumbs
find . -maxdepth 2 -type d | sed 'p;s/thumbs/thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb
./foo1/thumbs
./foo2/thumbs
./foo2/thumbs/thumbs
./foo2/thumbs
find . -type d | awk -F'/' '{print NF, $0}' | sort -k 1 -n -r | awk '{print $2}' | sed 'p;s/\(.*\)thumbs/\1thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb/thumb
./foo2/thumb
解决方案:

./foo1/thumbs
./foo2/thumbs
./foo2/thumbs
find . -maxdepth 2 -type d | sed 'p;s/thumbs/thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb
./foo1/thumbs
./foo2/thumbs
./foo2/thumbs/thumbs
./foo2/thumbs
find . -type d | awk -F'/' '{print NF, $0}' | sort -k 1 -n -r | awk '{print $2}' | sed 'p;s/\(.*\)thumbs/\1thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb/thumb
./foo2/thumb
输出:

./foo1/thumbs
./foo2/thumbs
./foo2/thumbs
find . -maxdepth 2 -type d | sed 'p;s/thumbs/thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb
./foo1/thumbs
./foo2/thumbs
./foo2/thumbs/thumbs
./foo2/thumbs
find . -type d | awk -F'/' '{print NF, $0}' | sort -k 1 -n -r | awk '{print $2}' | sed 'p;s/\(.*\)thumbs/\1thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb/thumb
./foo2/thumb
说明:

./foo1/thumbs
./foo2/thumbs
./foo2/thumbs
find . -maxdepth 2 -type d | sed 'p;s/thumbs/thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb
./foo1/thumbs
./foo2/thumbs
./foo2/thumbs/thumbs
./foo2/thumbs
find . -type d | awk -F'/' '{print NF, $0}' | sort -k 1 -n -r | awk '{print $2}' | sed 'p;s/\(.*\)thumbs/\1thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb/thumb
./foo2/thumb

使用
find
为您提供所有“拇指”子文件夹。通过管道将输出传输到
awk
,以打印每个路径中的“/”数加上原始输出<编码>排序按“/”的数量对输出进行数字排序(将最深的路径放在顶部)。通过管道将已排序的列表传送到
awk
,以删除每行的计数。通过管道将输出传输到
sed
p
选项打印输入行,
sed
命令的其余部分查找最后出现的“thumbs”,并仅将其更改为“thumb”。由于我们正在按照从最深到最浅的顺序处理排序列表,这将为
mv
提供正确的命令。最后,将管道连接到
xargs
-n2
选项告诉
xargs
使用管道中的两个参数,并将它们传递给
mv
命令。

目标1:如果只有一级深度,则将子文件夹“thumbs”更改为“thumb”

输入示例:

./foo1/thumbs
./foo2/thumbs
./foo2/thumbs
find . -maxdepth 2 -type d | sed 'p;s/thumbs/thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb
./foo1/thumbs
./foo2/thumbs
./foo2/thumbs/thumbs
./foo2/thumbs
find . -type d | awk -F'/' '{print NF, $0}' | sort -k 1 -n -r | awk '{print $2}' | sed 'p;s/\(.*\)thumbs/\1thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb/thumb
./foo2/thumb
解决方案:

./foo1/thumbs
./foo2/thumbs
./foo2/thumbs
find . -maxdepth 2 -type d | sed 'p;s/thumbs/thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb
./foo1/thumbs
./foo2/thumbs
./foo2/thumbs/thumbs
./foo2/thumbs
find . -type d | awk -F'/' '{print NF, $0}' | sort -k 1 -n -r | awk '{print $2}' | sed 'p;s/\(.*\)thumbs/\1thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb/thumb
./foo2/thumb
输出:

./foo1/thumbs
./foo2/thumbs
./foo2/thumbs
find . -maxdepth 2 -type d | sed 'p;s/thumbs/thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb
./foo1/thumbs
./foo2/thumbs
./foo2/thumbs/thumbs
./foo2/thumbs
find . -type d | awk -F'/' '{print NF, $0}' | sort -k 1 -n -r | awk '{print $2}' | sed 'p;s/\(.*\)thumbs/\1thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb/thumb
./foo2/thumb
说明:

./foo1/thumbs
./foo2/thumbs
./foo2/thumbs
find . -maxdepth 2 -type d | sed 'p;s/thumbs/thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb
./foo1/thumbs
./foo2/thumbs
./foo2/thumbs/thumbs
./foo2/thumbs
find . -type d | awk -F'/' '{print NF, $0}' | sort -k 1 -n -r | awk '{print $2}' | sed 'p;s/\(.*\)thumbs/\1thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb/thumb
./foo2/thumb
使用
find
只为您提供一个级别的所有“拇指”文件夹。通过管道将输出传输到
sed
p
选项打印输入行,其余的
sed
命令将“thumbs”更改为“thumb”。最后,将管道连接到
xargs
-n2
选项告诉
xargs
使用管道中的两个参数,并将它们传递给
mv
命令

问题:

./foo1/thumbs
./foo2/thumbs
./foo2/thumbs
find . -maxdepth 2 -type d | sed 'p;s/thumbs/thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb
./foo1/thumbs
./foo2/thumbs
./foo2/thumbs/thumbs
./foo2/thumbs
find . -type d | awk -F'/' '{print NF, $0}' | sort -k 1 -n -r | awk '{print $2}' | sed 'p;s/\(.*\)thumbs/\1thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb/thumb
./foo2/thumb
这不会捕获更深的子文件夹。在这里不能简单地不使用深度,因为
find
从顶部打印输出,并且因为我们在
mv
之前用
sed
替换内容,
mv
将导致更深的子文件夹出错。例如,./foo/thumbs/thumbs/将不起作用,因为
mv
将首先处理。/foo/thumbs并使其成为。/foo/thumbs,但是下一个输出行将导致错误,因为。/foo/thumbs/thumbs/不再存在

目标2:所有子文件夹的“拇指”更改为“拇指”,无论其深度如何

输入示例:

./foo1/thumbs
./foo2/thumbs
./foo2/thumbs
find . -maxdepth 2 -type d | sed 'p;s/thumbs/thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb
./foo1/thumbs
./foo2/thumbs
./foo2/thumbs/thumbs
./foo2/thumbs
find . -type d | awk -F'/' '{print NF, $0}' | sort -k 1 -n -r | awk '{print $2}' | sed 'p;s/\(.*\)thumbs/\1thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb/thumb
./foo2/thumb
解决方案:

./foo1/thumbs
./foo2/thumbs
./foo2/thumbs
find . -maxdepth 2 -type d | sed 'p;s/thumbs/thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb
./foo1/thumbs
./foo2/thumbs
./foo2/thumbs/thumbs
./foo2/thumbs
find . -type d | awk -F'/' '{print NF, $0}' | sort -k 1 -n -r | awk '{print $2}' | sed 'p;s/\(.*\)thumbs/\1thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb/thumb
./foo2/thumb
输出:

./foo1/thumbs
./foo2/thumbs
./foo2/thumbs
find . -maxdepth 2 -type d | sed 'p;s/thumbs/thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb
./foo1/thumbs
./foo2/thumbs
./foo2/thumbs/thumbs
./foo2/thumbs
find . -type d | awk -F'/' '{print NF, $0}' | sort -k 1 -n -r | awk '{print $2}' | sed 'p;s/\(.*\)thumbs/\1thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb/thumb
./foo2/thumb
说明:

./foo1/thumbs
./foo2/thumbs
./foo2/thumbs
find . -maxdepth 2 -type d | sed 'p;s/thumbs/thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb
./foo1/thumbs
./foo2/thumbs
./foo2/thumbs/thumbs
./foo2/thumbs
find . -type d | awk -F'/' '{print NF, $0}' | sort -k 1 -n -r | awk '{print $2}' | sed 'p;s/\(.*\)thumbs/\1thumb/' | xargs -n2 mv
./foo1/thumb
./foo2/thumb
./foo2/thumb/thumb
./foo2/thumb

使用
find
为您提供所有“拇指”子文件夹。通过管道将输出传输到
awk
,以打印每个路径中的“/”数加上原始输出<编码>排序按“/”的数量对输出进行数字排序(将最深的路径放在顶部)。通过管道将已排序的列表传送到
awk
,以删除每行的计数。通过管道将输出传输到
sed
p
选项打印输入行,
sed
命令的其余部分查找最后出现的“thumbs”,并仅将其更改为“thumb”。由于我们正在按照从最深到最浅的顺序处理排序列表,这将为
mv
提供正确的命令。最后,将管道连接到
xargs
-n2
选项告诉
xargs
使用管道中的两个参数,并将它们传递给
mv
命令。

请将问题转移到。在这里。我不知道如何移动,我搜索了,但我找不到信息。在这里删除,重新发布。请将您的问题移动到。它在这里。我不知道如何移动,我搜索了,但我找不到信息。删除这里,重新发布那里。