for는 파일의 공백을 여러 줄로 감지합니다.

for는 파일의 공백을 여러 줄로 감지합니다.

나는 지금 몇 가지 지침에 따라 일부 파일을 디렉터리 A에서 여러 디렉터리 B로 복사하는 스크립트를 작업 중입니다. 스크립트는 잘 작동하지만 공백이 있는 파일의 경우에는 여러 파일로 처리합니다.

my_super_cool_file_2007039904_11 (3rd copy).pdf

파일이 이 루프에 있는 동안:

for i in $(find $parent -mindepth 1 -maxdepth 1 -type f|cut -c 11-);do
echo "this is the file: $i" 
done

여러 파일로 처리됩니다.

  this is the file: my_super_cool_file_2007039904_11
  this is the file: (3rd 
  this is the file: copy).pdf

using으로 바꾸려고 했지만 space문제가 해결되지 않은 것 같습니다. 루프의 경우 3개의 다른 파일이었고 using과 동일한 문제가 있었고 계속 사용해야 했습니다.\spacesed 's/ /\\ /g' lsfind

답변1

-maxdepth 1and 를 사용하고 있으므로 -mindepth 1간단한 루프(in bash)를 수행할 수도 있습니다.

for name in "$parent"/*; do
    if [ -f "$name" ]; then
        dir=${name%/*}  # dir=$( dirname "$name" )
        dir=${dir##*/}  # dir=$( basename "$dir" )
        printf 'The directory is "%s"\n' "$dir"
    fi
done

루핑의 결과는 find일반적으로 나쁜 습관입니다.찾기 결과를 반복하는 것이 왜 나쁜 습관입니까?

답변2

cut -c 11-파일 경로의 디렉토리 부분을 제거하기 위해 GNU를 사용한다고 가정 해 보겠습니다 find.

find "$parent" -mindepth 1 -maxdepth 1 -type f -printf \
  'this is the file: %f\n'

모든 POSIX의 경우 find:

find "$parent/." ! -name . -prune -type f -exec sh -c '
  for file do
    file=${file##*/}
    printf "this is the file: %s\n" "$file"
  done' sh {} +

추가 자료:

답변3

$(find $parent -minlength1 -maxlength1 -type f|cut -c 11-)를 다음과 같이 따옴표로 묶으세요.

 "$(find $parent -mindepth 1 -maxdepth 1 -type f|cut -c 11-)"

관련 정보