텍스트 파일 목록에서 파일 만들기

텍스트 파일 목록에서 파일 만들기

다음을 사용하여 파일을 만들었습니다.

$ ls > ls.txt

이제 다른 디렉토리로 이동하여 이 파일을 사용하여 이름이 ls.txt.

이를 수행하는 가장 쉬운 방법은 무엇입니까?

답변1

당신은 그것을 사용할 수 있습니다 xargs. 새 디렉토리로 전환한 후,

xargs -d '\n' touch -- < path/to/ls.txt

원래 출력에 디렉터리가 있는 경우 ls해당 디렉터리는 새 위치에 일반 파일로 생성됩니다.

답변2

한 걸음 물러나도록 격려해 드리겠습니다.

실제 문제는 "현재 디렉터리에 일부 파일이 있고 다른 디렉터리에 같은 이름의 빈 파일을 만들고 싶습니다."인 것 같습니다.

이를 수행하는 합리적인 방법은 결과를 ls파일에 저장하는 것이라고 생각합니다. 이것은 합리적인 가정이지만 확실히 유일한 방법은 아닙니다!

그러면 다음은 어떻습니까?

for filename in *; do
    touch -- "/path/to/somewhere/else/${filename}"
done

/path/to/somewhere/else/파일이 생성될 디렉터리는 어디에 있습니까?

이 방법은 간단하고 읽기 쉽습니다. 또한 파일 이름의 공백, 줄 바꿈 및 특수 문자에 대해서도 완전히 안정적입니다. ls귀하의 프로필이 ls --color.

단점은 파일이 많으면 추가 작업이 많이 필요할 수 있다는 것입니다. 하지만 실제로 문제가 발생하기 전까지는 걱정하지 마세요. *

또 다른 단점은 현재 디렉터리에 파일이 없으면 문자 그대로 이라는 파일이 생성된다는 것입니다 . 루프 전에 작성하면 이를 방지 *할 수 있습니다 .shopt -s nullglob

d(다른 솔루션과 마찬가지로) 현재 디렉터리에 디렉터리가 있으면 d대상에 새로운 빈 파일이 생성된다는 점에 유의하세요. 이를 피하고 싶다면 다음과 같이 작성할 수 있습니다.

for filename in *; do
    if [ -f "${filename}" ]; then
        touch -- "/path/to/somewhere/else/${filename}"
    fi
done

일반 파일만 처리됩니다.


* 문제가 있는 경우: printf '\0\n' * | (cd /path/to/somewhere/else; xargs -0 touch --)수정하면 좋을 것 같습니다.

답변3

sed "s/\(.*\)/touch '\1'/" < ls.txt | sh

이는 파일 생성을 사용 touch하고 쉘 세션에 스크립트를 쓰는 쉘 스크립트로 파일을 변환합니다. 파일을 원하는 폴더에서 이 명령을 실행하세요. 다른 폴더에 있는 경우 ls.txt정규화된 이름으로 바꾸세요.

답변4

OFS=$IFS; 
IFS=$'\n';
cd to_new_location;
for file in `cat /path/to/ls.txt`; do
   touch $file;
done;
IFS=$OFS;

관련 정보