*.*
변수에 저장된 경로의 끝에서 사용해야 합니다 . 또한 "*" 하나만 있어도 괜찮습니다.
마지막으로 같은 이름의 폴더에 있는 파일을 이동하고 싶습니다. /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
스크립트에는 몇 가지 걸림돌이 있습니다. 그 중 일부는 즉시 떠오릅니다.
스크립트 줄에서: "for file in $a; do" $a의 *s는 예상한 대로 쉘에 의해 해석되지 않고 문자 그대로 사용됩니다.
*.*와 *는 동일하지 않습니다. *.*에는 파일 이름에 점이 필요하지만 *에는 점이 필요하지 않습니다.
다음과 같이 단순화된 스크립트를 확인하십시오.
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