경로 변수에 별표를 추가하시겠습니까?

경로 변수에 별표를 추가하시겠습니까?

*.*변수에 저장된 경로의 끝에서 사용해야 합니다 . 또한 "*" 하나만 있어도 괜찮습니다.

마지막으로 같은 이름의 폴더에 있는 파일을 이동하고 싶습니다. /share/test/temp/*for 루프와 같은 정적 경로를 사용하면 작동합니다. 이제 다른 사용자 이름이 있고 for 루프의 검색 폴더가 변경되었습니다. 그래서 변수가 필요해요. 이것은 작동하지 않습니다:

    destDir= $Startdir/$username/
a=$destDir/*.*

for file in $a  ; do
  tmp=${file:0:4};
  filenew=${file%.*}"($tmp)";
  mkdir -- "$filenew";
  mv -- "$file" "$filenew";
done

이스케이프, 작은따옴표, 큰따옴표, 백틱을 시도했습니다.

a=$destDir/*.*      # not working
a="$destDir/\*"     # not working
a= $destDir'/\*'    # not working
a="$destDir/'\*.\*" # not working

for 루프에서 대체될 별표를 사용하여 일반 찌르기를 어떻게 만들 수 있습니까? 아니면 경로를 저장하는 for 루프에 변수를 전달할 수 있고 for는 해당 경로에 있는 모든 파일을 검색해야 한다는 것을 알 수 있는 다른 옵션이 있습니까?

나는 for 루프를 선호한다find $destDir -name ..

답변1

스크립트에는 몇 가지 걸림돌이 있습니다. 그 중 일부는 즉시 떠오릅니다.

  1. 스크립트 줄에서: "for file in $a; do" $a의 *s는 예상한 대로 쉘에 의해 해석되지 않고 문자 그대로 사용됩니다.

  2. *.*와 *는 동일하지 않습니다. *.*에는 파일 이름에 점이 필요하지만 *에는 점이 필요하지 않습니다.

다음과 같이 단순화된 스크립트를 확인하십시오.

destDir=$HOME
a=$destDir/*
for file in $a;  do echo $file;  done

경고: 파일 이름에 공백이 포함되어 있으면 for 루프는 이를 두 개 이상의 파일 이름으로 분할합니다.

/share/test/temp/*가 적합하다면(파일 이름에 공백이 없음을 의미) 다음을 사용하는 것이 좋습니다.

for file in $destdir/*;  do ...yourstuff...; done

공백이 있으면 다음을 시도해 볼 수 있습니다.

find $destDir -type f | while read file;  do ...yourstuff...;  done

관련 정보