나는 지금 몇 가지 지침에 따라 일부 파일을 디렉터리 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과 동일한 문제가 있었고 계속 사용해야 했습니다.\space
sed 's/ /\\ /g'
ls
find
답변1
-maxdepth 1
and 를 사용하고 있으므로 -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-)"