파일이나 폴더 이름을 지정할 때 문자 제거

파일이나 폴더 이름을 지정할 때 문자 제거

여러 줄이 포함된 텍스트 파일이 있습니다. 각 행에는 다음 형식의 날짜가 있습니다.

12/2/2015
15/9/2013
08/3/2011
02/5/2005
.
.
.

다음과 같은 간단한 루프를 사용하여 for이 텍스트 파일의 각 줄에 대한 폴더를 만들고 싶습니다.

#!/bin/bash -f
for f in $(cat ./file.txt ); do 
mkdir ${f}
done

/날짜 형식의 문자가 있으므로 이 코드는 작동하지 않습니다 . 폴더를 생성하는 동시에 폴더 이름에서 해당 문자를 제거하려면 어떻게 해야 합니까? 따라서 출력 폴더 이름은 다음과 같습니다.

1222015
1592013
0832011
0252005
.
.
.

답변1

다음과 같은 명령을 사용할 수 있습니다.

sed -e 's/\///g' < file.txt | xargs mkdir

sed명령은 file.txt에서 줄 바꿈을 제거하고 파일의 각 줄에 대해 파이프가 실행됩니다 xargs.mkdir

tr대신 사용할 수 있는 동등한 명령(don_crissti가 제안함) sed은 다음과 같습니다.

tr -d / < file.txt | xargs mkdir

답변2

Perl 등으로 재창조하는 대신 원본 코드를 가져와 관련 부분을 추가하여 문제가 있는/문자를 제거했습니다.

원래 //는 전역 대체를 위한 bash 구문입니다(문제가 되는 /s가 여러 개 있기 때문입니다).

뒤에 오는 /는 대체하려는 (/)를 나타냅니다.

마지막 /는 우리가 바꾸고 싶은 내용(아무것도 없음) 앞에 옵니다.

#!/bin/bash -f
for f in $(cat ./file.txt ); do
mkdir ${f////}
done

답변3

가능한 해결책 awk:

awk -F"/" '{ print $1 $2 $3; }' file | xargs mkdir

답변4

이것은 bash 및 sed에 대한 방법입니다.

for var in $(cat data01.txt); do  dir=$(echo $var | sed -e 's/\///g;'); mkdir -vp $dir; done

관련 정보