폴더를 다른 디렉터리로 이동하려고 합니다(있는 경우에만). 나는 이것을 시도했다
project_dir="/home/user/Desktop/Code/projectX"
public_folders=(css sass js vendor)
for item in "${public_folders[@]}";
do
[ ! -f "$item" ] || mv -v "$item" "$project_dir"/public/"$item"
done
하지만 스크립트를 실행하면 폴더가 이동되지 않습니다. 질문이 있으신가요?
답변1
테스트가 원하는 것과 반대되는 결과를 보이고 있습니다.
[ ! -f $item ] || mv -v $item $project_dir/public/$item
!
와 를 조합하면 와 ||
사실상 동일 해집니다 [ -f $item ] && ...
.
$item
즉, 일반 파일인지 테스트하고 있다면 mv
-ing하는 것입니다. 디렉터리는 일반 파일이 아니라 디렉터리이기 때문에 이 테스트에서는 절대 true를 반환하지 않습니다. -d
가 아닌 디렉토리인지 테스트해야 합니다 -f
.
대신 다음을 수행하십시오(변수를 큰따옴표로 인용하는 것도 잊지 마십시오).
[ -d "$item" ] && mv -v "$item" "$project_dir/public/"
그런데, [ ! -f "$item" ] && mv ...
디렉토리가 존재하지 않는 유일한 "파일"이 아니기 때문에 그것을 사용하는 것조차 올바르지 않습니다.일반 파일- Linux에는 블록 장치 노드, 문자 장치 노드, 소켓, 명명된 파이프 및 기호 링크도 있습니다. 바라보다유닉스 파일 유형