これら2つのコマンドを書き換えて、次のコマンドのみを使用したいと思います。POSIX互換スイッチ:
find "$TARGET_DIR" -maxdepth 1 -type d -printf '(DIR) %f\n'
find "$TARGET_DIR" -maxdepth 1 -type f -printf '%s %f ' -exec file -b {} \;
-maxdepth 1
に置き換えることもできますが、-prune
より-printf
複雑なリダイレクトが必要です。
答え1
努力する:
find "$TARGET_DIR//." \( -name . -o -prune \) -type d -exec sh -c '
for f do
f=${f%//.}
f=${f%"${f##*[!/]}"}
f=${f##*/}
printf "(DIR) %s\n" "${f:-/}"
done' sh {} +
次の内容が簡単です-mindepth 1 -maxdepth 1
。
find "$TARGET_DIR//." \( -name . -o -prune \) -type d -exec sh -c '
for f do
printf "(DIR) %s\n" "${f##*/}"
done' sh {} +
2番目の場合:
find "$TARGET_DIR//." ! -name . -prune -type f -exec sh -c '
for f do
size=$(($(wc -c < "$f") +0)) || continue
printf %s "$size ${f##*/} "
file -b -- "$f"
done' sh {} +