/ /ディレクトリをループしてその内容をエコーする - bash

ディレクトリをループしてコンテンツをエコーする - bash

ディレクトリはフルパスに設定された変数です。

for e in "$DIR_0" "$DIR_1" "$DIR_2"
do
for i in $e/*
do
echo $i
done

各行の出力はフルパスです。各ファイルの名前だけが欲しい

回答:

回答№1は2

あなたは探している basename.


回答№2については2

これはBashと同等です basename

echo "${i##*/}"

最後のスラッシュを含め、それ以前のすべてを削除します。


回答№3の場合は0

本当に再帰したくないのなら、このfindコマンドでもっと簡潔にそれを達成することができます。

find "$DIR_0" "$DIR_1" "$DIR_2" -type f -maxdepth 1 -exec basename{} ;

サブディレクトリを再帰したい場合は、maxdepthを省略してください。

find "$DIR_0" "$DIR_1" "$DIR_2" -type f  -exec basename{} ;

回答№4の場合は0

bashを使ってディレクトリを再帰的に移動する方法

これを試してみてくださいあなたはそれを見つけることができます ここに

#! /bin/bash


indent_print()
{
for((i=0; i < $1; i++)); do
echo -ne "t"
done
echo "$2"
}

walk_tree()
{
local oldifs bn lev pr pmat
if [[ $# -lt 3 ]]; then
if [[ $# -lt 2 ]]; then
pmat=".*"
else
pmat="$2"
fi
walk_tree "$1" "$pmat" 0
return
fi
lev=$3
[ -d "$1" ] || return
oldifs=$IFS
IFS=""
for el in $1/ *; do
bn=$(basename "$el")
if [[ -d "$el" ]]; then
indent_print $lev "$bn/"
pr=$( walk_tree "$el" "$2" $(( lev + 1)) )
echo "$pr"
else
if [[ "$bn" =~ $2 ]]; then
indent_print $lev "$bn"
fi
fi
done
IFS=$oldifs
}

walk_tree "$1" ".sh$"

回答№5の場合は0

ここでbasenameとdirnameを置き換えるPOSIX準拠のBash関数も参照してください。

http://cfaj.freeshell.org/src/scripts/