문서의 모든 클라이언트에 대한 폴더 목록이 있으므로 ~/Documents/clients/
폴더 내에서 폴더는 다음과 같이 나타납니다.
Angelina_Julie-client23456
Brad_Pitt-client34567
Tom_Hanks-client12345
등. 그러면 다음 스크립트가 있습니다.
clientcode="client12345"
cdate=$(date +%F)
mydir="/home/userA/Documents/clients/$clientcode"_"$cdate/"
문제는 "/home/userA/Documents/$clientcode"_"$cdate/"
클라이언트 코드 앞에 클라이언트가 있기 때문에 이 경로를 찾을 수 없다는 것입니다. 따라서 이 경우에는 보시다시피 firstname_lastname-
올바른 mydir이 추가됩니다 . 그래서 Firstname_Lastname을 자동으로 가져오고 포함시키는 방법이 궁금합니다. 폴더에서 고유한지 여부 에 따라 ?/home/userA/Documents/Tom_Hanks-$clientcode"_"$cdate/
Tom_Hanks-
$clientcode
~/Documents/clients/
mydir
답변1
찾기 사용:
clientcode="client12345"
cdate=$(date +%F)
mydir="$(find /home/userA/Documents/clients/ -name "*${clientcode}*" -type d)_$cdate"
이름에 해당 디렉터리가 포함된 디렉터리를 찾아서 끝에 clientcode
추가합니다 ._$cdate
참고: 실제로 디렉터리 이름은 변경되지 않습니다. mydir
실제로 존재하지 않는 것처럼 보이는 디렉터리 이름이 존재합니다 .
답변2
이러한 디렉터리가 주어지면 .../clients/*-"$clientcode"/
일치하는 디렉터리 이름으로 확장됩니다. 별표는 인용되지 않았습니다. (그러나 이것은 정규식이 아니며 전역 패턴입니다.)
하지만 확장에서는 패턴을 사용할 수 없으므로 루프를 사용하여 문제를 해결해야 합니다.
mydir=
for d in ./clients/*-"$clientcode"/; do
if [ "$mydir" ]; then
echo "More than one matching directory!" >&2
fi
mydir=$d
done
if [ -z "$mydir" ]; then
echo "No match!" >&2
fi
./clients/*-"$clientcode"_*/
날짜가 일치하는 파일 이름의 일부여야 하는지(so ), 아니면 날짜를 추가하고 새 파일을 생성하려는지( ) 잘 모르겠습니다 newdir="${mydir}_${date}"
.