그래서 다음과 같은 코드 줄이 있습니다.
result=`find . -type f -size -1000c -print0 | xargs -0 ls -Sh | head`
for i in $result; do
item=`wc -c $i`
echo $item1
done
현재 폴더에 있는 모든 파일을 최대 1000바이트까지 다음 형식으로 인쇄합니다.
파일 크기./파일 이름
그런데 "./" 기호를 없애고 싶어서 "cut"을 사용해 보았습니다.
나는 비슷한 것을 하고 싶다:
for i in $result; do
item=`wc -c $i`
item1=`cut -f 1 $item` // this gives me the size
item2=`cut -c 7- $item` // this gives me all the character after ./
echo item1, item2 // now make it print
done
하지만 다음과 같은 오류가 발생합니다.
cut: 639: No such file or directory
누구든지 나에게 힌트를 줄 수 있습니까? 감사합니다.
답변1
시스템의 POSIX 지원에 따라 이것이 달성하려는 것과 동일한 결과를 제공할 것이라고 믿습니다.
find . -type f -size -1000c -printf '%P %s Bytes\n'
답변2
시놉시스를 살펴보세요cut(1)
:
cut OPTION... [FILE]...
마지막 인수는 파일(또는 파일 목록)이 될 것으로 예상됩니다. 당신이 하고 있는 일은 $item
마지막 매개변수를 제공하는 것뿐입니다. $item
639가 오류 메시지를 설명하는 것 같습니다 . cut
파일 이름 인수가 필요한 곳에 639를 전달하고 있습니다. 이러한 호출 $item
을 .cut
$i
파일 이름(빼기 기호)을 추출하는 가장 좋은 방법은 다음을 ./
사용하는 것입니다.매개변수 확장매번 고정된 수의 문자에 의존하는 대신 다음을 수행하세요.
item2="${i#*./}"
답변3
이 시도:
ls -l | awk '$5 <= 1000{print $5, $9}'
답변4
find . -type f -size -1000c -printf "%s %f\n"
%s
파일 크기를 바이트 단위로 인쇄합니다.
%f
모든 선행 디렉토리가 제거된 파일 이름을 인쇄합니다(마지막 요소만).