Wag*_*ags 5 ls shell shell-script
我正在尝试将目录名称输入 for 循环。我的代码如下:
td='/Test/TopDir/'
cd "$td"
for x in $(ls -d */ | cut -f1 -d'/'); do
echo x=$x
done
Run Code Online (Sandbox Code Playgroud)
运行 ls 命令时,我运行它的顶级目录如下所示:
ls -l
drwxrwxrwx 4 Jason users 4096 May 6 06:36 2014-02-02 - Jebby (
drwxrwxrwx 3 Jason users 4096 May 6 06:09 2014-02-04 - Jebby (
drwxrwxrwx 2 root root 4096 May 6 06:09 @eaDir
-rw-r--r-- 1 Jason users 3956225 Jan 26 10:17 DSC01062.JPG
-rw-r--r-- 1 Jason users 3927603 Jan 26 10:18 DSC01063.JPG
Run Code Online (Sandbox Code Playgroud)
我的for循环结果如下:
x=2014-02-02
x=-
x=Jebby
x=(
x=2014-02-04
x=-
x=Jebby
x=(
x=@eaDir
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,for 循环在每个空格之后将目录名称分解为子片段。在这个例子中,我只希望 For 循环对三个目录执行三次:
我究竟做错了什么?
ste*_*ver 15
ls尽可能避免解析shell 脚本的输出(或至少是文件名部分)。在文件名包含空格的情况下,它总是会出现分词问题。
如果你想遍历目录,你可以使用一个简单的 shell glob 来做到这一点,即
for d in */; do
echo "$d"
done
Run Code Online (Sandbox Code Playgroud)
该ls命令应仅用于在终端中以人类可读的形式显示目录列表。