GNU find의 -printf 조건자에 대한 POSIX 대안

GNU find의 -printf 조건자에 대한 POSIX 대안

이 두 명령을 다시 작성하여 다음 명령만 사용하고 싶습니다.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 {} +

두 번째의 경우:

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 {} +

관련 정보