我有一个tar文件,解压后,有很多文件命名就好
a
b\c
d\e\f
g\h
Run Code Online (Sandbox Code Playgroud)
我想将他们的名字更正为子目录中的文件
a
b/c
d/e/f
g/h
Run Code Online (Sandbox Code Playgroud)
当变量包含反斜杠时,我遇到问题,它将更改原始文件名.我想编写一个脚本来重命名它们.
参数扩展是要走的路.您拥有所需的一切bash,无需使用外部工具find.
$ touch a\\b c\\d\\e
$ ls -l
total 0
-rw-r--r-- 1 ghoti staff 0 11 Jun 23:13 a\b
-rw-r--r-- 1 ghoti staff 0 11 Jun 23:13 c\d\e
$ for file in *\\*; do
> target="${file//\\//}"; mkdir -p "${target%/*}"; mv -v "$file" "$target"; done
a\b -> a/b
c\d\e -> c/d/e
Run Code Online (Sandbox Code Playgroud)
for循环突破如下:
for file in *\\*; do - 选择名称中包含反斜杠的所有文件target="${file//\\//}"; - 交换正斜杠的反斜杠mkdir -p "${target%/*}"; - 通过从中剥离文件名来创建目标目录 $targetmv -v "$file" "$target"; - 将文件移动到新家done - 结束循环.我认为唯一棘手的一点是第二行:${file//\\//}是一个表达式${var//pattern/replacement},其中模式是一个转义反斜杠(\\),替换是一个正斜杠.
查看man bash并搜索"参数扩展"以了解有关此内容的更多信息.