Pat*_*son 3 command-line bash scripts
这是我用来重命名由ls -A
以下方法返回的文件的脚本的一部分:
for FILE in `ls -A`
do
ext=${FILE##*.}
NUM=$(($NUM+1))
NEWFILE=`echo $2_$NUM.$ext | sed 's/ /_/g'`
mv "$FILE" "$NEWFILE"
done
Run Code Online (Sandbox Code Playgroud)
但是找不到带空格的名字!$2 参数不能成为错误的原因,为什么我将一个没有空格的名称作为参数,这个脚本采用该名称并重命名文件夹中的所有文件,以便让它们编号并且不修改文件扩展名。不幸的是,它不会重命名名称中包含空格的文件。有人能帮我吗?
cho*_*oba 10
for
迭代words,单词由空格分隔。你不应该迭代 的输出ls
,你应该使用* .*
:
for file in * .* ; do
if [[ $file = . || $file = .. ]] ; then
continue
fi
# ...
done
Run Code Online (Sandbox Code Playgroud)
您可以通过设置shell 选项在 bash '*' shell glob 中包含隐藏文件('dot files')dotglob
shopt -s dotglob
for file in *
do
echo "$file"
done
Run Code Online (Sandbox Code Playgroud)
例如,对于包含file
,file with spaces
和.hidden file
(最后一个隐藏并有一个空格)的目录,这会产生
file
file with spaces
.hidden file
Run Code Online (Sandbox Code Playgroud)
您可能还想添加该nullglob
选项以防止在目录为空的情况下出现错误情况 - 请参阅优秀的BashFAQ/004。请记住引用变量,"$file"
并且最好不要对变量名称使用全大写。
归档时间: |
|
查看次数: |
2822 次 |
最近记录: |