我正在编写一个shell脚本,如下所示:
for file in `ls`
do
mkdir "$file"_folder
cp $file "$file"_folder
done
我想要做的是为当前目录中的每个文件创建一个文件夹,并为其命名,然后将下划线文件夹作为名称,然后将该文件复制到其中。我的问题是文件名中包含空格。我该如何逃脱它们?有很多资源解释了如何对变量执行此操作,但没有一个可以应用于我使用 for 循环获取名称的这种情况。
我正在编写一个shell脚本,如下所示:
for file in `ls`
do
mkdir "$file"_folder
cp $file "$file"_folder
done
我想要做的是为当前目录中的每个文件创建一个文件夹,并为其命名,然后将下划线文件夹作为名称,然后将该文件复制到其中。我的问题是文件名中包含空格。我该如何逃脱它们?有很多资源解释了如何对变量执行此操作,但没有一个可以应用于我使用 for 循环获取名称的这种情况。
不要在ls
那里使用,使用shell globbing。(一般情况下,不要解析 . 的输出 ls
。)
for file in *
do
# only consider files, not directories
if [ -f "$file" ] ; then
new_dir="$file"_folder
# create the directory
if [ ! -d "$new_dir" ] ; then
mkdir "$new_dir"
if [ $? -ne 0 ] ; then
# handle directory creation eror
fi
fi
# possibly check for the copied file existence here
# and deal with that appropriately (i.e. skip/error/copy anyway)
cp "$file" "$new_dir"
fi
done
怎么样
find . -type f -exec mkdir {}_folder \; -exec cp {} {}_folder \;
它在当前目录中查找所有常规文件,创建文件夹(第一个-exec
),并将文件复制到新文件夹中(第二个-exec
)。
您不
ls
正是出于这个原因进行解析
for file in *
do
mkdir "${file}_folder"
cp "$file" "${file}_folder"
done