Linux之特殊的环境变量IFS以及如何删除带有空格的目录

1、IFS是什么?

Linux下有一个特殊的环境变量叫做IFS,叫做内部字段分隔符(internal field separator)。IFS环境变量定义了bash shell用户字段分隔符的一系列字符。默认情况下,bash shell会将空格当做字段分隔符。我这里的系统是Centos7系统。

但是往往我们不能仅仅以空格符来作为字段分隔符,有时候我们需要以换行符设置为分隔符。

演示如下:

现在我创建了四个目录,其中一个目录带有空格。现在我想把一下子他们统统都删除掉。

[root@ELK-chaofeng test]# ls
chao  chao feng  chen  feng
[root@ELK-chaofeng test]# ll
total 16
drwxr-xr-x 2 root root 4096 Feb 14 11:57 chao
drwxr-xr-x 2 root root 4096 Feb 14 10:52 chao feng
drwxr-xr-x 2 root root 4096 Feb 14 11:57 chen
drwxr-xr-x 2 root root 4096 Feb 14 11:57 feng

如何直接删除的话,会出现下面的情况:

[root@ELK-chaofeng test]# find . -type d
.
./chao feng
./chen
./feng
./chao
[root@ELK-chaofeng test]# for dir in `find . -type d`; do echo ${dir} ;done
.
./chao
feng
./chen
./feng
./chao

上面红色背景的本来是一个目录,结果这里却显示成了两个目录,所以使用rm删除的话肯定是删除不掉的。(我这里使用echo来做演示而已,echo显示正确,那么rm也能顺利删除带有空格的目录)

此时我们就需要使用IFS来解决这个问题了。

[root@ELK-chaofeng test]# IFS=$‘\n‘ && for dir in `find . -type d`; do echo ${dir} ;done
.
./chao feng
./chen
./feng
./chao

这个时候我们发现带有空格的目录可以完整显示了。这是正确的。那么现在我们就可以删除了。

[root@ELK-chaofeng test]# ll
total 20
drwxr-xr-x 2 root root 4096 Feb 14 11:57 chao
drwxr-xr-x 2 root root 4096 Feb 14 10:52 chao feng
drwxr-xr-x 2 root root 4096 Feb 14 11:57 chen
drwxr-xr-x 2 root root 4096 Feb 14 11:57 feng
[root@ELK-chaofeng test]# IFS=$‘\n‘ && for dir in `find . -type d`; do rm -rf ${dir} ;done
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘.’
[root@ELK-chaofeng test]# ls

此时rm报错可以忽略。现在看来我们已经成功的结果了这个问题。

原文地址:https://www.cnblogs.com/FengGeBlog/p/10373901.html

时间: 2024-11-07 09:06:30

Linux之特殊的环境变量IFS以及如何删除带有空格的目录的相关文章

linux中修改PATH环境变量

如何修改PATH环境变量 1.1 什么是环境变量 1.linux里面哪里都可以使用,内容一般都不会发生变化 2.大写 3.PATH LANG 4.修改环境变量的时候前面要加上export 1.2 PATH含义 作用 PATH变量里面存放的是linux下面命令的位置. 1.3 linux下面运行命令的过程 ####1)输入 ls ####2) ls是否在PATH这些路径/目录中 ####3)如果有就执行 解析 ####4)如果没有则提示 command not found 1.4 模拟环境 ##1

linux和windows中环境变量设置常用命令

Linux和Windows下查看环境变量方法 一.查看所有环境变量的名称和值: Linux下:export Windows下:set 二.根据名称查该环境变量的值: Linux下:echo $环境变量名 如:echo $ORACLE_HOME Windows下:set环境变量名 如:set $ORACLE_HOME 三.设置环境变量: Linux下:export环境变量名=值 如:$export ORACLE_HOME=/home/oracle/product/10.2.0 Windows下:s

Linux系统下修改环境变量PATH路径的三种方法

比如要把/etc/apache/bin目录添加到PATH中,方法有三: 1.#PATH=$PATH:/etc/apache/bin 使用这种方法,只对当前会话有效,也就是说每当登出或注销系统以后,PATH 设置就会失效 2.#vi /etc/profile 在适当位置添加 PATH=$PATH:/etc/apache/bin (注意:= 即等号两边不能有任何空格) 这种方法最好,除非你手动强制修改PATH的值,否则将不会被改变 3.#vi ~/.bash_profile 修改PATH行,把/et

Linux下各种常见环境变量的配置

Linux系统下各种环境变量都通过修改/etc/profile文件来实现.由于是系统文件,修改此文件需要root权限.因此实现以下功能都需要用户拥有root权限. 另:不要轻易修改profile文件中的现有内容.应在保证原有内容不变的前提下,在文件的最后插入新的一行. 1.路径变量PATH 当用户在某工作目录执行一个命令或者可执行程序时,若当前路径下不存在该程序,则系统将从PATH路径列表中查找指定的应用程序.还记得java命令,ping命令么?这些应用程序所在的文件夹都包含在了PATH路径中.

Linux设置和查看环境变量的方法

1. 显示环境变量HOME $ echo $HOME /home/redbooks 2. 设置一个新的环境变量hello $ export HELLO="Hello!" $ echo $HELLO Hello! 3. 使用env命令显示所有的环境变量 $ env HOSTNAME=redbooks.safe.org PVM_RSH=/usr/bin/rsh Shell=/bin/bash TERM=xterm HISTSIZE=1000 ... 4. 使用set命令显示所有本地定义的S

Linux 下如何设置环境变量

假如你安装了一个软件,安装好后,输入命令时,提示"command not found", 这涉及到环境变量的PATH问题.PATH设置是linux下定制环境变量的一个组成部分. linux中每个用户都有一个专门的运行环境,这个环境就是一组环境变量的定义,用户可以对自己的运行环境进行定制.环境和Shell紧密相关,用户登录系统后就启动了一个Shell,一般是bash,bash有两个系统级配置文件,/etc/bashrc 和 /etc/profile. 1, echo 显示环境变量. ec

Linux下配置Node环境变量及问题详解

这是之前在Linux下配置Node环境变量时踩过的坑,今天又有小伙伴质询这个问题,因此记录下来,不仅是给新童鞋们一些参考,也方便日后查阅 在这之前,相信都已经安装好了,没安装的可以查看博主另一篇文章  ---------http://www.cnblogs.com/Halifa/p/5772263.html 配置Node环境变量有永久生效和当时生效几种方式,这里只讲解永久生效 进入主题: 修改/etc/profile文件,在末尾添加以下内容 export NODE_HOME=/usr/local

linux服务之shell环境变量PATH的设置(centos)

Centos系统下修改环境变量PATH路径的方法 电脑脑中必不可少的就是操作系统.而Linux的发展非常迅速,有赶超微软的趋势.这里介绍Linux的知识,让你学好应用Linux系统.比如要把/etc/apache/bin目录添加到PATH中,方法有三: 1.#PATH=$PATH:/etc/apache/bin使用这种方法,只对当前会话有效,也就是说每当登出或注销系统以后,PATH 设置就会失效 2.#vi /etc/profile在适当位置添加 PATH=$PATH:/etc/apache/b

linux网络配置、环境变量以及JDK安装(CentOS 6.5)

由于需要搭建hadoop平台,但是苦于没有现成可用的linux服务器,只好自己下载了CentOS 6.5从头装起,安装过程中遇到了很多问题,比如网络配置.时钟同步.环境变量配置.以及各种服务的启停,还有jdk的安装等(虽然系统自带JDK,但是本人过于低端,自带的JDK的安装路径都搞不明白,就干脆自己装了一个),时间长了容易忘记,所以在这里写下来作为记录,顺便也分享给与我一样的菜鸟玩家,高手们可以退散了,当然了如果有批评指正小弟跪迎. 新建用户 新安装的linux一般只有root管理员用户,由于我