我想从文件列表创建目录:
for file in $(ls *.txt); do
folder=${file//.txt/ };
folder=${folder//./'/'};
folder=${folder//[[:space:]]/};
mkdir -p $folder;
done
我可以将分配folder
的3个字符串操作命令链接到一行吗?
我尝试了几件事,但都没有成功。可以以某种方式使用|
运算符吗?
答案 0 :(得分:1)
Bash无法做到这一点,但是Z Shell (zsh)(非常相似)可以嵌套替换项:
for file in *.txt; do
folder=${${${file//.txt/ }//./'/'}//[[:space:]]/};
mkdir -p $folder;
done
(您无需执行$(ls *.txt)
(以这种方式解析ls
就是dangerous:您会丢失所有空格),因为您可以给它*.txt
,可以正确处理文件名中的空格。这可以在任何POSIX Shell中使用。)