我想编写一个脚本,在没有它的文件的末尾添加'0'。
这就是我写的:
#!/bin/bash
for file in $1
do
echo $file
ls $file | grep "\0$"
if ["$?"="1"]
then
fi
done
我不知道如何以我可以重命名的方式定位文件
答案 0 :(得分:1)
for file in *[!0]; do mv "$file" "${file}0"; done
对于未结束0
的每个名称,请将其重命名。请注意,这会处理带有空格等的名称。
我想给脚本一个目录,它会重命名其中不以0结尾的文件。我怎样才能以一种方式使用它来告诉脚本使用哪个目录?
因此,使用单个目录进行微不足道的必要更改(如果指定了多个目录,则不拒绝命令行;只是静静地忽略附加内容):
for file in "${1:?}"/*[!0]; do mv "$file" "${file}0"; done
"${1:?}"
表示法确保$1
已设置且不为空,如果不是,则会生成错误消息。你也可以改为写"${1:-.}"
;这将在当前目录而不是远程目录上工作。然后,glob会在该目录中生成不以0
结尾的文件名列表,并重命名它们。如果您有Bash,则可以使用shopt -s nullglob
如果目录中没有没有0
后缀的文件,您将不会遇到问题。
你可以推广处理任意数量的参数(所有参数都应该是目录,如果没有指定目录,则默认为当前目录):
for dir in "${@:-.}"
do
for file in "$dir"/*[!0]; do mv "$file" "${file}0"; done
done
或(强制目录):
for dir in "${@:-.}"
do
(cd "$dir" && for file in *[!0]; do mv "$file" "${file}0"; done)
done
这样做的好处是报告哪些参数不是目录,或者是不可访问的目录。
可以做出这种无穷无尽的变化;其中一些甚至可能有用。
现在,我想做同样的事情,但是,脚本应该重命名不以' {{1结尾的文件,而不是以'
结束0
'结尾的文件。 }}'这样他们就会以'.0
'?
由于修订后的结尾,这有点棘手。仅使用.0
是不够的。例如,如果文件列表包含[!.][!0]
,30
,x.0
,x0
和z.9
,则z1
仅列出{{} 1}}(省略echo *[!.][!0]
,z1
和30
,但不以x0
结尾。)
我可能会使用类似的东西:
z.9
另一个替代方案列出了更多的glob模式:
.0
请注意,如果你想查找不结束for dir in "${@:-.}"
do
(
cd "$dir" &&
for file in *
do
case "$file" in
(*.0) : skip it;;
(*) mv "$file" "${file}0";;
esac
done
)
done
的文件,这会很快变得更加棘手 - 会有7个glob表达式(但for dir in "${@:-.}"
do
(cd "$dir" && for file in *[!.][!0] *.[!0] *[!.]0; do mv "$file" "${file}0"; done)
done
变体会同样直接地工作),并且.00
变得越来越重要(或者您需要case
而不是更简单的移动命令。)