查找并重命名双引号包含目录中的文件
Find and rename double quotes contains files in directory
我正在尝试重命名目录中文件名包含双引号的文件。
/tables/ddl/ directory
"user".sql
"customer".sql
inventory.sql
"orders".sql
想删除包含它的文件名中的双引号。
像这样:
user.sql
customer.sql
inventory .sql
orders.sql
在我的 shell 脚本中,为了查找带双引号的文件,我使用了带有 regax 的 find 命令,如下所示。它显示带双引号的文件列表。
find . -name '*["]*'
我还尝试了中继目录和重命名文件。
for myfile in /tables/ddl/*; do
echo $myfile
rename 's,^[0-9]{2}\.,,' *sql
done
是否可以同时查找和重命名包含双引号的文件?
从第二个代码中 rename
命令的用法来看,您似乎可以使用基于 perl 的 rename
命令。 (有两种不同的重命名命令,一种是基于 perl 的,另一种不是。令人困惑。)
然后你可以重命名文件删除双引号:
rename 's/"//g' /tables/ddl/*.sql
- 第一个参数
s/"//g
是删除双引号的 perl 语句。
- 您可以使用 type-glob
*.sql
一次将多个文件传递给 rename
命令。
- 以上命令不影响不包含双引号的文件。
[编辑]
这是没有基于 perl 的 rename
命令的替代方法:
find tables/ddl -type f -name '*"*' -print0 | while IFS= read -r -d '' file; do
mv -- "$file" "$(sed 's/"//g' <<< "$file")"
done
find
命令的用法和你的差不多
-print0
选项指定一个空字符 (\0) 作为分隔符
用于保护空白字符(空格、制表符等)的文件
文件名,如果有的话。
read
命令的-d ""
选项对应上面的-print0
将空字符的输入流再次拆分为文件名。
sed 's/"//g' <<< "$file"
命令去掉双引号
来自文件名。
- 上面的命令假定目录名称(此处为
tables/ddl
)
不包括双引号。
或者简单地说:
for file in tables/ddl/'"'*'"'.sql; do
mv -- "$file" "$(sed 's/"//g' <<< "$file")"
done
双引号周围的单引号避免内部星号 *
用双引号括起来。
我正在尝试重命名目录中文件名包含双引号的文件。
/tables/ddl/ directory
"user".sql
"customer".sql
inventory.sql
"orders".sql
想删除包含它的文件名中的双引号。 像这样:
user.sql
customer.sql
inventory .sql
orders.sql
在我的 shell 脚本中,为了查找带双引号的文件,我使用了带有 regax 的 find 命令,如下所示。它显示带双引号的文件列表。
find . -name '*["]*'
我还尝试了中继目录和重命名文件。
for myfile in /tables/ddl/*; do
echo $myfile
rename 's,^[0-9]{2}\.,,' *sql
done
是否可以同时查找和重命名包含双引号的文件?
从第二个代码中 rename
命令的用法来看,您似乎可以使用基于 perl 的 rename
命令。 (有两种不同的重命名命令,一种是基于 perl 的,另一种不是。令人困惑。)
然后你可以重命名文件删除双引号:
rename 's/"//g' /tables/ddl/*.sql
- 第一个参数
s/"//g
是删除双引号的 perl 语句。 - 您可以使用 type-glob
*.sql
一次将多个文件传递给rename
命令。 - 以上命令不影响不包含双引号的文件。
[编辑]
这是没有基于 perl 的 rename
命令的替代方法:
find tables/ddl -type f -name '*"*' -print0 | while IFS= read -r -d '' file; do
mv -- "$file" "$(sed 's/"//g' <<< "$file")"
done
find
命令的用法和你的差不多-print0
选项指定一个空字符 (\0) 作为分隔符 用于保护空白字符(空格、制表符等)的文件 文件名,如果有的话。read
命令的-d ""
选项对应上面的-print0
将空字符的输入流再次拆分为文件名。sed 's/"//g' <<< "$file"
命令去掉双引号 来自文件名。- 上面的命令假定目录名称(此处为
tables/ddl
) 不包括双引号。
或者简单地说:
for file in tables/ddl/'"'*'"'.sql; do
mv -- "$file" "$(sed 's/"//g' <<< "$file")"
done
双引号周围的单引号避免内部星号 *
用双引号括起来。