![GNU find의 -printf 조건자에 대한 POSIX 대안](https://linux55.com/image/48198/GNU%20find%EC%9D%98%20-printf%20%EC%A1%B0%EA%B1%B4%EC%9E%90%EC%97%90%20%EB%8C%80%ED%95%9C%20POSIX%20%EB%8C%80%EC%95%88.png)
이 두 명령을 다시 작성하여 다음 명령만 사용하고 싶습니다.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 {} +