簡體   English   中英

在Bash中使用空格循環遍歷目錄

[英]Loop over directories with whitespace in Bash

在bash腳本中,我想遍歷當前工作目錄中的所有目錄並對它們進行處理。 它們可能包含特殊符號,尤其是空格。 我怎樣才能做到這一點? 我有:

for dir in $( ls -l ./)
do
    if [ -d ./"$dir" ]

但這會跳過名稱中帶有空格的目錄。 任何幫助表示贊賞。

試試看:

for dir in */

選擇解決方案:

http://www.cyberciti.biz/tips/handling-filenames-with-spaces-in-bash.html

總體思路是更改默認分隔符(IFS)。

#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for f in *
do
  echo "$f"
done
IFS=$SAVEIFS

有多種方法。 這是非常快的事情:

find /your/dir -type d -print0 | xargs -0 echo

這將遞歸掃描/ your / dir目錄,並將所有路徑傳遞給命令“ echo”(根據需要進行交換)。 它可能多次調用echo,但是它將嘗試一次傳遞控制台允許的盡可能多的目錄名。 這非常快,因為幾乎不需要啟動任何進程。 但是它僅適用於可以將任意數量的值作為選項的程序。 -print0告訴find使用零字節分隔文件路徑(而-0告訴xargs讀取以零字節分隔的參數)如果沒有后一個,則可以執行以下操作:

find /your/dir -type d -print0 | xargs -0 -n 1 echo

要么

find /your/dir -type d -print0 --exec echo '{}' ';'

選項-n 1將告訴xargs不要同時向程序傳遞更多的參數。 如果您不想查找遞歸掃描,則可以指定depth選項來禁用遞歸(雖然根本不了解語法)。

雖然這是否可以在您的特定腳本中使用是另一個問題;-)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM